1

重複の可能性:
Python の「最小の驚き」: 変更可能な既定の引数

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 に答える