我想在我的主python脚本中定义一些变量,并将它们在单独的模块中定义的函数中使用。这是一个示例代码。假设主脚本命名为main.py,并且模块称为mod.py。
mod.py
def fun():
print a
main.py
from mod import *
global a
a=3
fun()
现在,此代码给我一个错误
NameError: global name 'a' is not defined
任何人都可以解释为什么会生成错误(我的意思是,定义为全局的变量应适用于所有功能,对吗?我已经知道这两个选项,并且不想接受这些
- 在模块而不是主脚本中定义变量。
- 将变量作为参数传递给函数。
如果还有其他选择,请建议。
编辑
我不想选择上述选项,因为
- 当前这些值对我来说是固定的。但是我怀疑它们将来可能会改变(例如,数据库名称和主机IP)。因此,我想将它们作为变量存储在一个地方。因此,将来可以很容易地编辑脚本。如果我在每个模块中定义变量,则必须编辑所有模块。
- 我不想在功能中传递它们,因为其中有太多,大约50个左右。我知道我可以将它们作为** kwarg传递,但这看起来不太好。
模块中共享的全局变量通常是一个坏主意。如果需要它们(例如,出于某些配置目的),则可以这样做:
global_config.py
# define the variable
a = 3
main.py
import global_config
def fun():
# use the variable
print(global_config.a)
this:
定义为全局的变量应适用于所有函数,对吗?
只是不正确。这不是全球变量的工作方式;它们可用于定义的模块中的所有函数。
您不解释自己在做什么或为什么这些解决方案对您不起作用,但是总的来说,全球变量是一个坏主意。明确传递值几乎总是要走的方式。