今天我打了一個有趣的python bug,其中實例化一個類重複似乎是持有狀態。在稍後的實例化調用中,變量已經定義。爲什麼通過python默認變量初始化一個變量在對象實例化中保持狀態?
我把這個問題歸結爲下面的類/ shell交互。我意識到這不是初始化類變量的最佳方式,但它肯定不應該像這樣行事。這是一個真正的錯誤還是這是一個「功能」? :d
tester.py:
class Tester(): def __init__(self): self.mydict = self.test() def test(self,out={}): key = "key" for i in ['a','b','c','d']: if key in out: out[key] += ','+i else: out[key] = i return out
Python提示符:
Python 2.6.6 (r266:84292, Oct 6 2010, 00:44:09) [GCC 4.2.1 (Apple Inc. build 5664)] on darwin >>> import tester >>> t = tester.Tester() >>> print t.mydict {'key': 'a,b,c,d'} >>> t2 = tester.Tester() >>> print t2.mydict {'key': 'a,b,c,d,a,b,c,d'}
杜佩:http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument – bstpierre 2010-10-08 01:38:26
莫非它將'out'解釋爲一個全局變量,因此每當你調用'test'時都會加入它? – 2010-10-08 01:27:54
[「最小的驚訝」和可變的默認參數](http:// stackoverflow。com/questions/1132941 /至少令人驚訝的和可變的默認參數) – 2017-05-09 14:04:47