[英]Global Variables between different modules
main.py:
from module import *
var=10
def func2():
print "func2:" ,var
def main():
global var
var=20
print "main - before", var
func2()
func1()
print "main - after", var
if __name__=='__main__':
main()
module.py
from main import *
def func1():
global var
print "func1:", var
程序打印:
主要-之前:20
func2:20
func1:10
主-20點后
“ var”是全局變量。 我希望當我更改var的值時,無論變量'var'出現在哪里,它都會被更改。 func1和func2之間的唯一區別是func1在另一個模塊中。 仍然,我不明白為什么func1和func2之間的'var'值不同。
python中沒有真正的全局變量。 對象綁定到名稱空間中的變量,並且global
關鍵字引用當前模塊的名稱空間。 from somemodule import *
在當前模塊的命名空間中創建新變量,並將它們引用到somemodule的對象。 現在,您有兩個不同的變量指向同一個對象。 如果您重新綁定其中一個變量,則其他變量將繼續引用原始對象。 此外,function.s的“全局”名稱空間是在其中定義的模塊,即使將其導入到其他模塊也是如此。
如果需要“全局”變量,請導入模塊並使用其名稱空間限定名稱,而不是在本地名稱空間中重新綁定各個變量。
這是一個帶注釋的示例...
cfg.py
var = 10
somelist = []
var2 = 1
def show_var2():
print var2
main.py
import cfg
from cfg import * # bind objects referenced by variables in cfg to
# like-named variables in this module. These objects
# from 'cfg' now have an additional reference here
if __name__ == '__main__':
print cfg.var, var
var = 20 # rebind this module's 'var' to some other value.
# this does not affect cfg's 'var'
print cfg.var, var
print '----'
print cfg.somelist, somelist
somelist.append(1) # update this module's 'somelist'
# since we updated the existing object, all see it
print cfg.somelist, somelist
print '----'
var2 = 2
print var2, cfg.var2, show_var2() # show_var2 is in cfg.py and uses its
# namespace even if its been imported
# elsewhere
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.