我刚开始学习Python,遇到了默认参数的概念。
Python文档中提到,函数的默认参数值仅在第一次遇到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
覆盖。
那么默认参数有两个内存吗?一个是实际默认值(具有程序范围),另一个是传递给它的对象时的内存(具有函数调用的作用域)?
def
是Python中的一个语句,会被执行。默认参数在函数创建时被计算,而不是在调用函数时计算。 - Steven RumbalskiLt
)在函数返回后不再被函数引用。 - Martijn Pietersfunc()
时没有传入第二个参数,那么本地名称L
将引用默认值列表,如果你传入一个列表Lt
,那么L
将引用该列表。 在这两种情况下,当函数返回时,该引用将被清除,L
将不再存在。然而,它所引用的值仍然存在,因为它有其他名称引用它。 - Martijn Pieters