主脚本中定义的全局变量不能由不同模块

时间:2015-05-06 10:35:11

标签: python module global-variables

我想在我的主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. 将变量作为参数传递给函数。
  3. 如果还有其他选择,请提出建议。

    修改

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

    1. 目前这些值对我来说是固定的。但我怀疑他们将来可能会改变(例如,数据库名称和主机IP)。所以,我想将它们作为变量存储在一个地方。因此,将来编辑脚本变得很容易。如果我在每个模块中定义变量,我将不得不编辑所有这些变量。
    2. 我不想在功能中传递它们,因为它们太多了,大约50个左右。我知道我可以将它们作为** kwarg传递给你,但这看起来并不太好。

2 个答案:

答案 0 :(得分:2)

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

global_config.py

# define the variable
a = 3

main.py

import global_config

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

答案 1 :(得分:1)

这:

  

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

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

你没有解释你正在做什么或为什么这些解决方案不适合你,但一般来说全局变量是一个坏主意;明确地传递该值几乎总是可行的方法。