英文:
Modify field issues via global in python
问题
在执行文件 b 时,输出的 x 值取决于文件 b 的导入方式。如果按照第一种方式导入(即 from a import x
),那么输出将是 10。如果按照第二种方式导入(即 import a
),那么输出将是 20。
这是因为在第一种导入方式中,你只导入了变量 x
,而不导入 modify_global_variable
函数,因此在执行 modify_global_variable()
时,它会引用文件 a 中的全局变量 x
,这个全局变量的值一开始被设置为 10,所以输出结果是 10。
而在第二种导入方式中,你导入了整个文件 a,包括其中的函数 modify_global_variable
,因此当你执行 a.modify_global_variable()
时,它会修改文件 a 中的全局变量 x
的值为 20。所以在这种情况下,输出结果是 20。
英文:
If I have two files a, b, defined in file a as follows:
x = 10 # global variable
def modify_global_variable():
global x # Use the global keyword to declare x as the global variable
x = 20 # to modify the value of the global variable x
The b file is defined as follows:
from a import x
modify_global_variable()
print(x)
At this time to execute the b file, then how much is the x output?
My output result is that: 10
But make the b file as follows:
import a
a.modify_global_variable()
print(a.x)
At this point, I run the b file again, and the output result is 20.
Any friend to help me to answer, this is why??
Thank you!!
答案1
得分: 2
因为:
from a import x
本质上等同于:
import a
x = a.x
del a
所以,你正在创建一个新的全局变量在执行该导入语句的模块中。
原始的 a.x
变量仍然存在,而你的 modify_global_variable()
函数在两种情况下都修改了它。只是它不再是 b.x
相同的变量。
考虑以下带有字典的情况:
>>> a = {'x': 10}
>>> b['x'] = a['x']
>>> print(a, b)
{'x': 10} {'x': 10}
>>> a['x'] = 20 # 你的 modify_global_variable 做了这个
>>> print(a, b)
{'x': 20} {'x': 10}
本质上,你的模块工作方式相同(实际上,它们的命名空间就是 dict
对象,你可以使用模块内部的 globals()
获取,或者使用模块的引用,比如你 import module
,然后使用 module.__dict__
或 vars(module)
。
英文:
Because:
from a import x
Is essentially equivalent to:
import a
x = a.x
del a
So you are creating a new global variable in the module that executes that import statement.
The original a.x
variable is still there, and your modify_global_variable()
function modifies it in both cases. It's just not the same variable as b.x
.
Consider the following scenario with dictionaries:
>>> a = {'x': 10}
>>> b['x'] = a['x']
>>> print(a, b)
{'x': 10} {'x': 10}
>>> a['x'] = 20 # your modify_global_variable does this
>>> print(a, b)
{'x': 20} {'x': 10}
Essentially, your modules work the same way (indeed, their namespaces are literally dict
objects that you can get with globals()
from within the module or, with a reference to the module, say you import module
, then just module.__dict__
or vars(module)
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论