只是困惑在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'模塊來說只是全局的。您的導入製作了本地副本。 – 2013-03-06 05:54:27
@Steven我也這麼認爲,但一個快速測試表明情況並非如此。來自一個相對較新的用戶也是一個很好的有趣問題 - 歡迎! – Voo 2013-03-06 05:54:48
但爲什麼它必須改變?您正在導入a = 1並且它是打印1.請嘗試瞭解如何使用不可變類型以及如何工作引用和垃圾回收。你可以在Mark Lutz的書的第一部分找到所有這些,就像「乞求蟒蛇」或其他東西一樣。 – Denis 2013-03-06 06:15:03