Python 导入和全局变量

标签 python import global-variables

假设我有一个文件:

# main.py

import foo

my_global = "global variable"
foo.print_global()

还有另一个:

# foo.py

def print_global():
    global my_global
    print(my_global)

当我运行 main.py 时,为什么会出现 NameError: name 'my_global' is not Defined ? 如何使 my_global 可用于 foo.py?尝试一下是不是一个坏主意 - 也许我应该在这种情况下始终将值作为函数参数传递?

最佳答案

Python 没有进程范围的全局变量,只有模块级的全局变量。 foo.print_global 查看 foo.my_global,而不是您设置的 main.my_global。也就是说,print_global 用于全局变量的范围是在定义 print_global 时确定的,而不是在调用它时确定的。 >.

这将达到您的预期。

import foo

foo.my_global = "global variable"
foo.print_global()

请注意,foo.py 不应依赖其他人在调用 print_global 之前创建其全局变量;至少,foo.py 应该将 my_global 初始化为 None(如果不是其他默认值)。

另请注意,上面的解决方案不同

from foo import my_global

my_global = "..."

这会在当前模块中创建一个新的全局名称,该名称使用 foo.my_global 的当前值进行初始化。随后的赋值更改了“本地”全局变量的名称,而不是 foo.my_global

关于Python 导入和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59738003/

相关文章:

php - ZF2 如何在 View 中使用全局变量

c++ - 将 C++ 类转换为过程 API : common way of replacing member variables?

javascript - 在 Artillery 中跨 YAML 文件使用全局变量

python - 从python检测macos中的暗模式

asp.net - 从excel导入数据表跳过最后一列值

mysql - MySQL数据库字段出现奇怪字符

python - postgresql(aws redshift) 错误1204 String length exceeds DDL length

python - 是否可以将已编译的 .pyc 文件反编译为 .py 文件?

python - 如何将单个元素元组转换为字符串?

Python3全局目录