导入python和全局变量中的其他文件

时间:2015-10-23 08:39:00

标签: python python-3.x

在导入您自己的文件时,我无法找到有关导入如何工作的详细说明。

我在使用全局变量导入文件时遇到问题,并且当我将全局变量放在文件main函数之前时,设法让它工作。

有人能解释为什么会这样吗?

快速了解导入实际如何运作。

当我这样做时(伪代码)它不起作用:

文件1:

import file2    
file2.main()

file2的:

main():
    glob_var = 0

    def add():
        global glob_var
        glob_var += 1

    add()

但是如果我把变量放在第一位就好了:

文件1:

import file2    
file2.main()

file2的:

glob_var = 0

main(): 
    def add():
        global glob_var
        glob_var += 1

    add()

4 个答案:

答案 0 :(得分:2)

'main'只是一种方法。根据定义,方法内的变量是本地的。这就是为什么第二种方式正在发挥作用。

答案 1 :(得分:1)

它不起作用的原因是因为你在main中声明了全局变量。 (在确定main之后你确实错过了冒号,这使得它令人困惑,但看着缩进,我认为这是一个定义)。必须在任何本地函数的范围之外定义全局变量。这是嵌套函数定义的一种情况。

如果您正在寻找的话,也可以不使用全局变量。但是,如果要在嵌套函数中使用main中定义的变量,则可以执行以下操作: 在python 3中,有一种方法可以使用nonlocal关键字

来完成这项工作
def main():
    var = 10
    def nested_fun():
        nonlocal var
        var = var + 1

如您所见,我们在这里不需要全局变量。

编辑:如果是python 2,这不起作用。但是,您可以在main中使用列表并在嵌套函数中修改该列表。

def main():
    var = [10]
    def nested_fun():
        nonlocal var
        var[0] = var[0] + 1

答案 2 :(得分:0)

如果我正确理解了这个问题,它就全局变量而言与导入无关。

如果要定义全局变量,则必须在模块级别定义。 main函数不是全局范围,这就是第一个代码无法按预期工作的原因。通过将变量声明移到add之外,它将在全局范围内定义,因此<a>方法可以使用全局变量来访问它。

答案 3 :(得分:0)

我认为我们必须从global语句的含义开始。来自文档:

  

这意味着列出的标识符将被解释为全局变量。

重要的一点是它只涉及解释,即global没有创造任何东西。这就是为什么你的第一个例子不起作用的原因。您正尝试为不存在的内容添加+1。 OTOH,global_var = 100将在那里工作,它将创建一个新的全局变量。