になりませんなぜ、ここにコードリセットパイソングローバル値は、Pythonのグローバル値についてだけで混乱して効果
#gl.py
import cli
a = 1
print "gl 1: %d %d" % (id(a), a)
def reset():
global a
a = 7
print "reset 1: %d %d" % (id(a), a)
if __name__ == '__main__':
cli.handler(reset)
print "gl 2: %d %d" % (id(a), a)
CLIコード
#cli.py
def handler(func):
from gl import a
print "cli 1: %d %d" % (id(a), a)
func()
print "cli 2: %d %d" % (id(a), a)
のツーピースある実行結果が
です$ python gl.py
gl 1: 150847672 1
gl 1: 150847672 1
cli 1: 150847672 1
reset 1: 150847600 7
cli 2: 150847672 1 #Why value doesn't change
gl 2: 150847600 7
「function reset()」の実行後にわかりませんが、グローバル値の結果はcli.pyでは変更されません(cli 2:150847672 1)、しかしgl.pyに戻って、グローバルな価値は変化します!!
インポートを 'import gl'に変更し、' a'を 'gl.a'と変更してください。グローバル変数は 'gl'モジュールに関してのみグローバルです。インポートによってローカルコピーが作成されます。 –
@スティーブン私はあまりにも思ったが、簡単なテストではそうではないことが示されている。比較的新しいユーザーからの良い、面白い質問 - 歓迎! – Voo
しかし、それはなぜ変わらなければならないのですか?あなたはa = 1をインポートしています。それは印刷されています1.ちょっと試してみましょう。これらの全体はMark Lutzの最初の部分で "Begging with python"やそれと同じものがあります。 – Denis