我在python中有这段代码,我无法理解这些函数在封装在类中时如何保持其状态。
class Param(object):
def bad_append(self, item, l=[]):
l.append(item)
return l
p = Param()
print(p.bad_append(1))
print(p.bad_append(2))
pp = Param()
print(pp.bad_append(100))
输出
[1]
[1, 2]
[1, 2, 100]
我不明白为什么 pp 的输出是[1, 2, 100]
而不是[100]
.
您遇到的问题是 Python 的一个陷阱,该函数的默认参数是全局共享值。让我建议以下更改:
def bad_append(self, item, l=None):
l = l or []
#rest of code...
通过将默认值设置为None
,然后重新分配给任何列表,您将避免共享状态。