【问题标题】:importing other files in python and global variables在 python 和全局变量中导入其他文件
【发布时间】:2015-10-23 08:39:00
【问题描述】:

在导入您自己的文件时,我无法很好地描述导入的工作原理。

我在导入带有全局变量的文件时遇到了问题,当我将全局变量放在文件主函数之前时,我设法让它工作。

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

快速了解导入的实际工作原理。

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

文件 1:

import file2    
file2.main()

文件2:

main():
    glob_var = 0

    def add():
        global glob_var
        glob_var += 1

    add()

但是如果我像这样把变量放在第一位的话就可以了:

文件 1:

import file2    
file2.main()

文件2:

glob_var = 0

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

    add()

【问题讨论】:

  • 这与导入无关。您需要先定义实际的全局变量,然后才能通过global 关键字引用它。

标签: python python-3.x


【解决方案1】:

'main' 只是一种方法。根据定义,方法内的变量是局部变量。这就是为什么第二种方式有效的原​​因。

【讨论】:

    【解决方案2】:

    它不起作用的原因是因为您在 main.xml 中声明了全局变量。 (您确实错过了 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
    

    【讨论】:

      【解决方案3】:

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

      如果你想定义一个全局变量,它必须在模块级别定义。 main 函数不是全局范围,这就是为什么第一个代码不能按预期工作的原因。通过将变量声明移到main 之外,它将在全局范围内定义,因此add 方法可以将其作为全局变量访问。

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2019-10-24
          • 1970-01-01
          • 2018-07-23
          • 1970-01-01
          • 2014-02-18
          • 2017-06-07
          • 1970-01-01
          • 2023-03-04
          相关资源
          最近更新 更多