来自其他模块的全局变量和全局语句

2024-05-19 20:27:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一些关于Python如何处理全局(模块)变量和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!你知道吗

什么?是同一个物体!或者,至少,我希望是这样。你知道吗


Tags: 模块fromimportnonefoodef关键字全局
1条回答
网友
1楼 · 发布于 2024-05-19 20:27:16

每个模块都有自己的全局名称范围。通过从另一个模块通过*导入所有内容,可以将另一个模块的全局变量的副本(对值的附加引用)创建到您自己的模块中。你知道吗

使用限定名以防止发生这种情况:

import module_1

module_1.set_g_up()
print module_1.g

如果您实际上指的是变量module_1.g,则无法通过调用它来访问同一个变量。您所能做的就是两个变量都包含相同的值(仅对列表、对象和其他可变项有意义)。你知道吗

相关问题 更多 >