Skip to content

python函数设计

ChannelCMT edited this page Jun 3, 2019 · 1 revision

5_Python函数设计

函数定义

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

  • 可以自己创建函数,这被叫做用户自定义函数。
  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

1、 函数语法

def function_name( parameters ):

'函数_文档字符串'
functions
return [expression]
def fun_1(x):
    '求平方'
    a = x**2
    return a

fun_1(6)
36

2、 参数设置

必备参数

必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

def fun_2(x,y):
    return x+y

fun_2(6,12)
18

关键字参数

关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。

def fun_3(StockName,Price):
    print('StockName:', StockName)
    print('Price:',Price)
    return

fun_3(Price=100, StockName='APPLE')
StockName: APPLE
Price: 100

默认参数

调用函数时,缺省参数的值如果没有传入,则被认为是默认值。

def fun_3(StockName,Price, Market='SPX500'):
    print('StockName:', StockName)
    print('Price:',Price)
    print('Market:', Market)
    return

fun_3(Price=100, StockName='APPLE', Market='NAS100')
StockName: APPLE
Price: 100
Market: NAS100

不定长参数

你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。

以一个*开始的参数,代表一个任意长的元组,一个以**开始的参数,代表一个字典:

*agrs/ **kwargs

def fun_4(*agrs, **kwargs):
    print('agrs:',agrs)
    print('kwargs:',kwargs)
    return

fun_4(a=1,b=2,c=3,d=4,e=5)
agrs: ()
kwargs: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

3、 return语句

return语句[表达式]退出函数,选择性地向调用方返回一个表达式。

不带参数值的return语句返回None。

def fun_5(a,b):
    c = a+b
#     print(c)
    return

print(fun_5(5,6))
None

变量作用域

(全局变量与局部变量)

answer = 66

def fun_6(a,b):
    answer = a+b
    print('局部变量:', answer)
    return answer

fun_6(6,54)
print('全局变量:',answer)
局部变量: 60
全局变量: 66

4、 匿名函数

python 使用 lambda 来创建匿名函数。

  • lambda只是一个表达式,函数体比def简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
a = 20
fun_7 = lambda a ,b : a*b

fun_7(6, 10)
60

5、 内嵌函数

函数内部创建函数

def fun_8(a, b):
    c = a+b
    def multiple(c,a):
        return a*c
    return multiple(c,a)

fun_8(5,6)
55
Clone this wiki locally