定义
文档字符串,help(func)将显示文档字符串;
函数中没有return是,返回的是None;
>>> def func1(a):
"this is a test func"
print("a=", a)
>>> help(func1)
Help on function func1 in module __main__:
func1(a)
this is a test func
>>> func1(2)
a= 2
参数
参数是否可以修改?
普通变量 – 传值 – 不能修改
List – 引用 – 可以修改
关键字参数
好处:每个参数的含义更为清晰;参数出现的顺序不重要;
>>> def func1(a, b):
"this is a test func"
print("a=", a)
print("b=", b)
>>> func1(b=2, a=1)
a= 1
b= 2
参数默认值
>>> def func1(a, b=3):
"this is a test func"
print("a=", a)
print("b=", b)
>>> func1(1)
a= 1
b= 3
收集参数
作用:支持任意个数的参数。
使用方法:需要使用*,** 定义参数。在函数中,前者被定义为list,后者被定义为dict。
反转过程:调用函数时,对tuple、dict类型分别使用*,**,可以将数据展开。
>>> def func2(a, *b):
print("a=", a)
for x in b:
print(x)
>>> func2(1,2,3,4,5)
a= 1
2
3
4
5
>>> l = range(4)
>>> func2(2, *l)
a= 2
0
1
2
3
>>> def func3(a, **b):
print("a=", a)
for x,y in b.items():
print(x, y)
>>> func3(1, b=3, c=4, d =5)
a= 1
c 4
b 3
d 5
>>> d = {"c":1, "d":2, "e":3}
>>> func3(2, **d)
a= 2
c 1
e 3
d 2
作用域
Vars():返回一个dict,包含当前作用域中的变量。
局部变量名会屏蔽全局变量名,可以通过globals() 获得全局变量的dict数据结构,然后通过这个;
>>> x = 1
>>> globals()["x"]
1
在函数内部可以读取全局变量。进行赋值操作时,将生成局部变量,如果要给全局变量赋值,必须使用global声明全局变量。
>>> y=1
>>> def func4(a):
global y
y = a
>>> func4(4)
>>> y
4
>>>
>>> z=1
>>> def func5(a):
z=a
>>> func5(4)
>>> z
1
函数可以嵌套定义。
函数型编程机制
Lambda表达式
>>> f = lambda x: 2*x
>>> f(3)
6
>>>
Map
Filter
Reduce