主脚本中定义的全局变量不能被不同模块中定义的函数访问
global variable defined in main script can't be accessed by a function defined in a different module
我想在我的 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 传递,但这看起来不太好。
这个:
a variable defined as global should be available to all functions, right?
事实并非如此。这不是全局变量的工作方式;它们可用于定义它们的模块中的所有函数 。
你没有解释你在做什么或者为什么这些解决方案对你不起作用,但一般来说全局变量是个坏主意;显式传递值几乎总是可行的方法。
在模块之间共享全局变量通常不是一个好主意。如果你需要它们(例如出于某些配置目的),你可以这样做:
global_config.py
# define the variable
a = 3
main.py
import global_config
def fun():
# use the variable
print(global_config.a)
我想在我的 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 传递,但这看起来不太好。
这个:
a variable defined as global should be available to all functions, right?
事实并非如此。这不是全局变量的工作方式;它们可用于定义它们的模块中的所有函数 。
你没有解释你在做什么或者为什么这些解决方案对你不起作用,但一般来说全局变量是个坏主意;显式传递值几乎总是可行的方法。
在模块之间共享全局变量通常不是一个好主意。如果你需要它们(例如出于某些配置目的),你可以这样做:
global_config.py
# define the variable
a = 3
main.py
import global_config
def fun():
# use the variable
print(global_config.a)