python的默认参数
python可以使用变量作为默认参数,但是该变量必须在函数定义之前就已经声明。比如
i = 1
def func( _i = i ):
print(_i)
func() #1
同时,对于python,默认参数在函数定义的时候就已经计算好了。
def func( list=[] ):
list.append('a')
print(list)
func() #['a']
func(['b']) #['b','a']
func() #['a','a']
可以发现第1次和第3次执行func都是针对同一个list(默认list),这是因为默认参数在函数定义时就已经计算出来,且这个计算只进行了一次,就算第3次调用func用的还是默认的list。第2次参数不是默认的list,但是它不影响默认值的状态。
再看看闭包,这里的list对于每一个inner是独一份的。一个闭包一份环境
def outer():
list = []
def inner():
list.append('a')
print(list)
return inner()
outer()
outer()