为什么导入函数定义的全局变量不更改?

时间:2019-03-15 12:25:45

标签: python python-3.x function python-import

我在文件中有一个功能:

global_value = 100    #defualt
def function(new_value):
    global global_value
    print(global_value,new_value)
    global_value = new_value

function()接受一个值,将其比较为global_value,然后将global_value设置为new_value。

我没有在文件中使用此功能,而是将其导入。

(文件2:)

from file import *
value = input("enter value")
function(value)
print(global_value)

该函数正常运行,但是在最后显示global_value等于100(它的默认值),而不是输入。 我该怎么做才能在文件2中更改global_value?

谢谢。

1 个答案:

答案 0 :(得分:2)

Python中的全局变量并不是真正的全局变量。它们仅限于特定模块。

执行from file import *之后,您有两个变量; file.global_variable(这是file.function所更新的),以及当前模块中的新global_variable,它使用file.global_variable的原始值初始化了 ,但永远不会由function更新。

每个函数都包含对定义的全局范围的引用。在Python 2中,它是file.function.func_globals;在Python 3中,其tmp.function.__globals__。那是在其中查找其任何“全局”变量的范围,而不是在其中称为的函数的范围。

在第二个文件中添加普通的import file,然后运行print(global_variable, file.global_variable)来查看区别。