我只是想检查一下我期望它的工作方式是否正确。这是我正在编写的课程的简化版本:
class Foo(object):
def __init__(self):
pass
def bar(self, test1=[], test2=[]):
if test2:
test1.append(1)
print test1
现在,对我来说,test1 和 test2 - 除非设置 - 在调用函数 bar 时应该始终设置为空列表。这意味着当 test1 被打印时,列表中应该只有一个项目(假设你只给出一个项目作为参数)。然而,这种情况并非如此:
>>> i = Foo()
>>> i.bar()
[]
>>> i.bar(test2=[1])
[1]
>>> i.bar()
[1, 1]
>>> i.bar(test2=[1])
[1, 1, 1]
在这种情况下,您会期望使用整数得到类似的结果:
class Foo(object):
def __init__(self):
pass
def bar(self, test1=0, test2=0):
if test2:
test1 += 1
print test1
但在这里,test1 始终设置为 0:
>>> i = Foo()
>>> i.bar()
0
>>> i.bar(test2=1)
1
>>> i.bar(test2=1)
1
>>> i.bar(test2=1)
1
似乎列表在函数或类的命名空间中是持久的,但整数不是。
这可能是我的一个误解,所以想澄清一下。