首页 > 解决方案 > Python 导入和全局变量

问题描述

假设我有一个文件:

# main.py

import foo

my_global = "global variable"
foo.print_global()

另一个:

# foo.py

def print_global():
    global my_global
    print(my_global)

为什么NameError: name 'my_global' is not defined我跑步时会得到main.py?我怎样才能my_global提供给foo.py?尝试是不是一个坏主意-也许在这种情况下我应该始终将值作为函数参数传递?

标签: pythonimportglobal-variables

解决方案


Python 没有进程范围的全局变量,只有模块级的全局变量。foo.print_globalfoo.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_globalNone,如果不是其他默认值的话。

另请注意,上述解决方案

from foo import my_global

my_global = "..."

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


推荐阅读