2017-09-05 270 views
0

最近我发现了一个我的代码中的一个bug,它足够让我感到奇怪。主要的问题是,下面的代码工作:Python全局变量范围

def test(): 
    print(memory) 


if __name__ == "__main__": 
    memory = 1 
    test() 

如果memory是在文件的顶部定义,但是这似乎是打破所有范围规则对我来说这将是明显的。但是一定有一些原因。

+0

似乎是合乎逻辑我。在调用test()时,已经定义了“memory”。 – ifconfig

+1

Python会执行您的程序以便读取它。当yiu定义一个函数时,它只会在你调用它的时候才会被执行,所以Python在第一次运行时甚至都没有看到。你可能会认为它会用你自己的函数内容替代你的调用'test()' – avloss

+0

@ifconfig在经验之后逻辑吗?我的意思是我曾经使用C语言和在声明不编译前使用全局变量的代码。这对我来说似乎合乎逻辑。 –

回答

0

即使内存变量的工作看起来很奇怪,但它是预期的。 Variable Scope未被破坏!

如果__name__ ==“__main__”: - 此语句用来定义或声明时,源文件直接调用执行,而不是导入到另一个文件,并从第三模块称为全局功能。

因此,当你直接执行源文件时,它首先将定义变量 - 存储器,是全球性的,并且可以在功能测试作为全局变量进行访问(没有掩盖发生)。

请参考下面的链接,更多的了解 - What does if __name__ == "__main__": do?