1、不定参数
2、默认参数
默认参数的值仅仅在函数定义的时候赋值一次
x = 42
def spam(a, b=x):
print(a, b)
spam(1) # 1 42
x = 23 # 改变 x 的值的时候对默认参数值并没有影响
spam(1) # 1 42
默认参数的值应该是不可变的对象,比如 None、True、False、数字或字符串
def spam(a, b=[]): # error []、{} 等为可变对象
此时,可以试用None作为默认值,然后在函数里面检查它,给予相应的默认值
def spam(a, b=None):
if b is None:
b = []
3、匿名函数
x = 10 func1 = lamda y: x + y x = 20 func2 = lamda y: x + y func(10) # 30 func2(10) # 30
lambda 表达式中的 x 是一个自由变量,在运行时绑定值,而不是定义时就绑定,与函数的默认参数定义是不同的,如下所示
funcs = [lambda x: x + n for n in range(5)] for f in funcs: print(f(0)) # 结果全是4,因为n的值在函数运行时为4