Yan*_*nis 0 python global-variables
我有这4个模块globals.py
globvara = "a"
Run Code Online (Sandbox Code Playgroud)
mod1.py
from globals import *
print globvara
Run Code Online (Sandbox Code Playgroud)
输出:a
mod2.py
from mod1 import *
def changegv(newval1):
#global globvara
globvara = newval1
def usechangegv(newval2):
changegv(newval2)
Run Code Online (Sandbox Code Playgroud)
和mod3.py
from mod2 import *
usechangegv("b")
print globvara
Run Code Online (Sandbox Code Playgroud)
输出:a
我想知道为什么globalvar在模块2中不会改变.我在全局变量中缺少一些东西.即使我取消注释全局globvara线,我也得到相同的结果.错误在哪里?
Python全局变量仅对模块是全局变量.从另一个模块(例如from mod1 import *)导入变量时,Python会在导入模块中创建对该值的重复引用.所以,你现在有两个名字,mod1.globvara和mod2.globvara,最初指向相同的值,但其不在有任何关系.如果您改变globvara了mod2.py,那么您正在改变mod2.globvara并且mod1.globvara 不会受到影响.
要避免此问题,请导入模块,而不是导入模块中定义的单个名称.例如,import globals.然后总是参考globals.globvara(或更好globals.a).由于您始终访问并分配相同的名称,因此它将按您期望的方式工作.
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |