I次のPythonコードを持っている:Pythonは属性値
#!/usr/bin/python
def f(x):
f.counter = getattr(f, "counter", 0)
print("Bfore: ",f.counter)
f.counter += 1
print("After: ",f.counter)
return "pass"
for i in range(5):
f(i)
私は上記のコードを実行すると、私は次の結果を参照してください。私は期待していた
('Bfore: ', 0)
('After: ', 1)
('Bfore: ', 1)
('After: ', 2)
('Bfore: ', 2)
('After: ', 3)
('Bfore: ', 3)
('After: ', 4)
('Bfore: ', 4)
('After: ', 5)
を:
f.counter = getattr(f, "counter", 0)
を呼び出すたびに常に0に初期化されます。
私for
ループで10
f(i)
。しかし、それはそうではないようです。どうして?
ありがとうございました。
Python 2を使用していますが、Python 3を使用することを示唆しています。Windowsの場合はPython 3を、* nixの場合は 'python3'をインストールしてください。 –
あなたはそれをなぜ期待しましたか?どこで/いつそれが初期化されると思いましたか? 'f'は常に同じ関数オブジェクトを参照しています。もしそれをゼロにリセットしたいのであれば、手動で行う必要があります。 'for i in range(5):f.counter = 0; f(i) 'とする。 – jonrsharpe