参数的默认值
可能重复:
Python中的“最小惊讶”:可变的默认参数
考虑以下功能:
def foo(L = []):
L.append(1)
print L
每次我调用foo时,它都会打印一个比以前更多的元素的列表,例如:
>>> foo()
[1]
>>> foo()
[1, 1]
>>> foo()
[1, 1, 1]
现在考虑以下功能:
def goo(a = 0):
a += 1
print a
当多次调用它时,我们得到以下图片:
>>> goo()
1
>>> goo()
1
>>> goo()
1
即每次通话都不打印较大的值。
这种看似不一致的行为背后的原因是什么?
另外,在第一个例子中,如何证明反直觉行为是可能的,为什么函数在调用之间保持状态?
当函数被定义时,默认参数被评估一次。 所以每次调用函数时都会得到相同的list
对象。
每次调用第二个函数时,您也会得到相同的0
对象,但由于int
是不可变的,因此在添加1
时需要将新对象绑定到
>>> def foo(L = []):
... print id(L)
... L.append(1)
... print id(L)
... print L
...
>>> foo()
3077669452
3077669452
[1]
>>> foo()
3077669452
3077669452
[1, 1]
>>> foo()
3077669452
3077669452
[1, 1, 1]
VS
>>> def foo(a=0):
... print id(a)
... a+=1
... print id(a)
... print a
...
>>> foo()
165989788
165989776
1
>>> foo()
165989788
165989776
1
>>> foo()
165989788
165989776
1
链接地址: http://www.djcxy.com/p/4885.html