在导入您自己的文件时,我无法找到有关导入如何工作的详细说明。
我在使用全局变量导入文件时遇到问题,并且当我将全局变量放在文件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()
答案 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
将在那里工作,它将创建一个新的全局变量。