当一个模块自己导入全局变量时会发生什么

时间:2014-08-13 03:59:28

标签: python import module scope global

我有以下模块:

thismod.py

var = 99

def local():
    var = 0  # Change local var

def glob1():
    global var  # Declare global (normal)
    var += 1  # Change global var                             var = 100

def glob2():
    var = 0  # Change local var
    import thismod  # Import myself
    thismod.var += 1  # Change global var

def glob3():
    var = 0  # Change local var
    import sys  # Import system table
    glob = sys.modules['thismod']  # Get module object (or use __name__)    
    glob.var += 1  # Change global var

def test():
    print(var)
    local(); glob1(); glob2(); glob3()
    print(var)

driver.py

import thismod
thismod.test()

我的问题是在glob2中,所以glob1显然将var更改为100.当模块在glob2中导入自身时,它是否没有得到全局变量的新副本" var"?我不明白** thismod.var + = 1 **如何改变原来的" var"。

1 个答案:

答案 0 :(得分:2)

  

当模块在glob2中导入自身时,是否没有得到全局变量“var”的新副本?

不。执行import foo时,如果先前已导入foo,则会发生的情况是使用现有引用。

import sys

import foo
print foo is sys.modules['foo']
oldfoo = foo

import foo    
print foo is sys.modules['foo']
print foo is oldfoo