sta*_*ner 7 python parameters function
可能重复:
Python中的"最小惊讶":可变默认参数
def f(a, L=[]):
L.append(a)
return L
print(f(1, [1, 2]))
print(f(1))
print(f(2))
print(f(3))
Run Code Online (Sandbox Code Playgroud)
我想知道为什么其他f(1),f(2),f(3)没有附加到第一个f(1,[1,2]).我想结果应该是:
[1, 2, 1]
[1, 2, 1, 1]
[1, 2, 1, 1, 2]
[1, 2, 1, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
但结果不是这个.我不知道为什么.
将两个不同的问题(更好地称为概念)融合到一个问题陈述中.
第一个问题与agh指出的SO问题有关.该线程给出了一个详细的解释,除了为了这个线程之外再次解释它没有任何意义我可以采取特权说明函数是第一类对象,并且参数及其默认值在声明期间是有界限的.因此,参数的作用与函数的静态参数非常相似(如果在不支持First Class Function Objects的其他语言中可以实现某些功能.
第二个问题是参数L绑定的List Object .传递参数时,传递的List参数是L绑定的参数.在没有任何参数的情况下调用时,更像是使用不同的列表(作为默认参数提到的列表)进行绑定,其中偏离与第一次调用中传递的不同.为了使案例更加突出,只需按照以下方式更改您的功能并运行示例.
>>> def f(a, L=[]):
L.append(a)
print id(L)
return L
>>> print(f(1, [1, 2]))
56512064
[1, 2, 1]
>>> print(f(1))
51251080
[1]
>>> print(f(2))
51251080
[1, 2]
>>> print(f(3))
51251080
[1, 2, 3]
>>>
Run Code Online (Sandbox Code Playgroud)
如您所见,第一个调用打印出L与后续调用形成对比的参数的不同ID .因此,如果列表不同,那么行为以及值的附加位置.希望现在它应该有意义