主脚本中定义的全局变量不能由其他模块中定义的函数访问



我想在我的主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传递,但这看起来不太好。

模块中共享的全局变量通常是一个坏主意。如果需要它们(例如,出于某些配置目的),则可以这样做:

global_config.py

# define the variable
a = 3

main.py

import global_config
def fun():
    # use the variable
    print(global_config.a)

this:

定义为全局的变量应适用于所有函数,对吗?

只是不正确。这不是全球变量的工作方式;它们可用于定义的模块中的所有函数

您不解释自己在做什么或为什么这些解决方案对您不起作用,但是总的来说,全球变量是一个坏主意。明确传递值几乎总是要走的方式。

相关内容

  • 没有找到相关文章

最新更新