无法获取更改后的全局变量

ABH*_* EA 4 python

t.py

value = 0

def change_value():
    global value
    value = 10
Run Code Online (Sandbox Code Playgroud)

间谍

import t
from t import value

t.change_value()

print(f'test1: {t.value}')
print (f'test2: {value}')
Run Code Online (Sandbox Code Playgroud)

输出

测试1:10

测试2:0

为什么它不返回 test2 中更改后的值?

cha*_*ite 5

这就是importPython 中的工作原理。您应该仔细阅读声明import的文档内容。

具体来说,当您from import在模块属性上使用语法时,Python 会查找该属性的值,然后“对该值的引用存储在本地命名空间中”。

所以,如果value10,那么在from t import value您引用了之后10。无论发生什么,这都10保持不变。10t.value

为了让大家明白引用语义与值语义的区别,请考虑一下如果使用它会发生什么t.py

value = []

def change_value():
    global value # not actually needed anymore
    value.append(10)

def change_reference():
    global value
    value = value + [10]
Run Code Online (Sandbox Code Playgroud)

对比一下callingt.change_value()t.change_reference(). 在第一种情况下,两个打印结果是相同的,而在第二种情况下,它们会不同。

这是因为调用后我们只有一个列表,而in 中的change_value()名称就是指它。我们有两个列表,原始(空)列表和新列表,并且in仍然指原始列表。values.pychange_reference()values.py