Python:dict默认参数...我怎么不知道他们这样工作?

时间:2012-10-28 23:40:23

标签: python

  

可能重复:
  “Least Astonishment” in Python: The Mutable Default Argument

class Klass(object):

    def a(self, d={}):
        print d
        self.b(d)

    def b(self, d={}):
        import random
        print d
        d[str(random.random())] = random.random()

我假设每次在没有参数的情况下调用c.a()时,我都会得到一个空的dict。然而,实际情况就是这样:

>>> c = Klass()
>>> c.a()
{}
{}
>>> c.a()
{'0.637151613258': 0.61491180520119226}
{'0.637151613258': 0.61491180520119226}
>>> c.a()
{'0.637151613258': 0.61491180520119226, '0.960051474644': 0.54702415744398669}
{'0.637151613258': 0.61491180520119226, '0.960051474644': 0.54702415744398669}
...

我真的不想做某种lambda / iscallable事。在这里使用什么样的好模式?

当然,在我开始输入问题时,我想出了解决问题的方法。但是,如果有人有不同的宠物方式,我很乐意听到。

1 个答案:

答案 0 :(得分:1)

可以使用以下内容获取新的空dict

    def a(self, d=None):
        if d is None:
            d = {}

可变默认参数下的问题here已得到很好的描述。