主脚本中定义的全局变量不能被不同模块中定义的函数访问

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

任何人都可以解释为什么会产生错误(我的意思是,定义为全局的变量应该对所有函数都可用,对吗?)以及可能的解决方法是什么?我已经知道这两个选项,不想选择其中任何一个

  1. 在模块而不是主脚本中定义变量。
  2. 将变量作为参数传递给函数。

如有其他选择,请提出。

编辑

我不想采用上述选项,因为

  1. 目前这些值对我来说是固定的。但我怀疑它们将来可能会改变(例如,数据库名称和主机 ip)。所以,我想将它们作为变量存储在一个地方。这样以后编辑脚本就变得容易了。如果我在每个模块中定义变量,我将不得不编辑所有这些变量。
  2. 我不想在函数中传递它们,因为它们太多了,大约有 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)