使用 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) 不保留它的值,它在调用之间重置为默认值。
预期的(无论如何对我来说)是 objects 参数应该在任何调用方法时重置为默认值(就像 b 参数一样),但这似乎没有发生,似乎只发生在第一次调用时。
谁能解释这种行为?这是这个版本的python中的一个错误还是它的预期行为?可能与跨调用保留列表引用有关,但字符串变量 (b) 不是?我对这种行为感到非常困惑。
谢谢