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

时间:2018-08-23 14:32:19

标签: 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]

1 个答案:

答案 0 :(得分:2)

您遇到的问题是Python的陷阱,该函数的默认参数是全局共享值。让我建议以下更改:

def bad_append(self, item, l=None):
  l = l or []
  #rest of code...

通过将默认值设置为None,然后重新分配给任何列表,您将避免共享状态。