可能重複:
「Least Astonishment」 in Python: The Mutable Default Argumentpython 2.7中的staticmethod參數保持跨呼叫值?
使用Python 2.7我遇到奇怪的行爲來了,我不知道該如何解釋,或者如果它甚至在任何python文檔存在。使用代碼
class MyClass:
@staticmethod
def func(objects=[], a=None, b=None):
objects.append(a)
print 'objects: %s'%objects
print 'b: %s'%b
MyClass.func(a='one')
MyClass.func(a='two', b='foo')
MyClass.func(a='three')
我得到得到輸出
objects: ['one']
b: None
objects: ['one', 'two']
b: foo
objects: ['one', 'two', 'three']
b: None
正如你可以看到,第一個列表參數(對象)的方法,保留它在調用值..新的值被附加到即使在它的頭部聲明中它有一個默認值[]。但最後一個參數(b)不保留它的值,它被重置爲調用之間的默認值。
預期(對我來說)是對象參數應該重置爲任何方法調用時的默認值(比如b參數),但這似乎不會發生,似乎只發生在第一個電話。
任何人都可以解釋這種行爲嗎?它是這個版本的Python的bug還是它的行爲?可能與列表引用在呼叫中保留有關,但字符串變量(b)不是?我很困惑這種行爲。
謝謝
0123sthttp://stackoverflow.com/questions/1132941/least -python-the-mutable-default-argument – mayhewr 2012-04-20 00:31:24
謝謝,這回答了我的問題。良好的聯繫,解釋這一切,從該鏈接的答案http://effbot.org/zone/default-values.htm – 2012-04-20 00:56:01