不同模块之间的全局变量
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
程序打印:
main - before: 20
func2: 20
func1: 10
main - after 20
'var' 是一个全局变量。我希望当我改变 var 的值时,它会在变量 'var' 出现的任何地方改变。
func1 和 func2 之间的唯一区别是 func1 在另一个模块中。不过,我还是不明白为什么 'var' 的值在 func1 和 func2 之间不同。
python 中没有真正的全局变量。对象绑定到命名空间中的变量,global
关键字引用当前的 module 命名空间。 from somemodule import *
在当前模块的命名空间中创建新变量并将它们引用到 somemodule 的对象。您现在有两个不同的变量指向同一个对象。如果重新绑定其中一个变量,其他变量将继续引用原始对象。此外,function.s "global" 命名空间是定义它的模块,即使它被导入到不同的模块。
如果您需要 "global" 变量,请导入模块并使用其命名空间限定名称,而不是重新绑定本地命名空间中的各个变量。
这是一个带注释的示例...
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
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
程序打印:
main - before: 20
func2: 20
func1: 10
main - after 20
'var' 是一个全局变量。我希望当我改变 var 的值时,它会在变量 'var' 出现的任何地方改变。 func1 和 func2 之间的唯一区别是 func1 在另一个模块中。不过,我还是不明白为什么 'var' 的值在 func1 和 func2 之间不同。
python 中没有真正的全局变量。对象绑定到命名空间中的变量,global
关键字引用当前的 module 命名空间。 from somemodule import *
在当前模块的命名空间中创建新变量并将它们引用到 somemodule 的对象。您现在有两个不同的变量指向同一个对象。如果重新绑定其中一个变量,其他变量将继续引用原始对象。此外,function.s "global" 命名空间是定义它的模块,即使它被导入到不同的模块。
如果您需要 "global" 变量,请导入模块并使用其命名空间限定名称,而不是重新绑定本地命名空间中的各个变量。
这是一个带注释的示例...
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