函数如何在 python 中维护状态?



我在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,然后重新分配给任何列表,您将避免共享状态。

最新更新