我刚开始学习 python,只是被默认参数概念所震撼。
在python doc中提到,函数的默认参数值仅在def
遇到语句时计算一次。这使得不可变和可变默认函数参数的值之间存在很大差异。
>>> def func(a,L=[]):
L.append(a)
return L
>>> print(func(1))
[1]
>>> print(func(2))
[1, 2]
这里可变函数参数 L 保留最后分配的值(因为默认值不是在函数调用期间计算的,就像在 C 中一样)
python中默认参数值的生命周期是程序的生命周期(如C中的静态变量)?
编辑 :
>>> Lt = ['a','b']
>>> print(func(3,Lt))
['a', 'b', 3]
>>> print(func(4))
[1, 2, 4]
这里在函数调用期间保留func(3,Lt)
默认值,L
不会被Lt
.
那么默认参数有两个内存吗?一个用于实际默认值(具有程序范围),另一个用于将对象传递给它时(具有函数调用范围)?