我有点惊讶于以下行为:
def main():
print "%s" % foo
if __name__ == "__main__":
foo = "bar"
main()
Run Code Online (Sandbox Code Playgroud)
即模块函数可以访问封闭变量__main__.它的解释是什么?
这里的事情是:
if __name__ == "__main__":
foo = "bar"
Run Code Online (Sandbox Code Playgroud)
在该脚本中定义名为foo的全局变量.所以该模块的任何功能都可以访问它.
上面列出的代码段是模块的全局代码,而不是任何函数内部代码.
在Python中,有全局作用域,函数也有自己的作用域。所以如果你在 name==main 下定义 foo ,它就在全局范围内。此外,如果在函数调用时声明变量,那么在函数中使用尚未声明的变量也不是错误。