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 中更改后的值?
这就是importPython 中的工作原理。您应该仔细阅读声明import中的文档内容。
具体来说,当您from import在模块属性上使用语法时,Python 会查找该属性的值,然后“对该值的引用存储在本地命名空间中”。
所以,如果value是10,那么在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
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |