1

可能的重复:
Python 中的“Least Astonishment”:可变默认参数

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()不带参数地打电话,我都会得到一个新的 empty 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事情。在这里使用什么好的模式?

当然,当我开始输入问题时,我发现我解决了这个问题。但是,如果有人对此有不同的宠物方式,我很想听听。

4

1 回答 1

1

可以得到一个新鲜的,空dict的:

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

这个问题在 Mutable Default Arguments 下得到很好的描述。

于 2012-10-28T23:40:22.963 回答