2024-05-19 20:27:16 发布
网友
我遇到了一些关于Python如何处理全局(模块)变量和global关键字的奇怪行为。你知道吗
global
模块1:
g = None def set_g_up(): global g g = "foo" set_g_up() print g
模块2:
from module_1 import * set_g_up() print g
模块1按预期打印"foo"。 模块2打印None!你知道吗
"foo"
None
什么?是同一个物体!或者,至少,我希望是这样。你知道吗
每个模块都有自己的全局名称范围。通过从另一个模块通过*导入所有内容,可以将另一个模块的全局变量的副本(对值的附加引用)创建到您自己的模块中。你知道吗
*
使用限定名以防止发生这种情况:
import module_1 module_1.set_g_up() print module_1.g
如果您实际上指的是变量module_1.g,则无法通过调用它来访问同一个变量。您所能做的就是两个变量都包含相同的值(仅对列表、对象和其他可变项有意义)。你知道吗
module_1.g
每个模块都有自己的全局名称范围。通过从另一个模块通过
*
导入所有内容,可以将另一个模块的全局变量的副本(对值的附加引用)创建到您自己的模块中。你知道吗使用限定名以防止发生这种情况:
如果您实际上指的是变量
module_1.g
,则无法通过调用它来访问同一个变量。您所能做的就是两个变量都包含相同的值(仅对列表、对象和其他可变项有意义)。你知道吗相关问题 更多 >
编程相关推荐