范围是if __name__ == __main__
什么?这个声明是否涵盖了全局空间中的所有内容?
问问题
5003 次
4 回答
12
块没有什么特别之处if __name__ == '__main__'
。也就是说,它的范围是由它发生的地方决定的。由于此类块通常发生在顶层,因此它们的范围是全局的。
如果这个块出现在一个完全合法的函数中,它的作用域将是本地的——除了它__name__
仍然会解析为模块中定义的全局值。
于 2012-10-09T19:30:35.057 回答
6
>>> if __name__ == '__main__':
... x = 1
... print 'x' in globals()
True
编辑:user4815162342 提出了一个很好的观点,即这个 if 语句可以在任何范围内编写。它最常写在全局范围内。
这是一个函数内部:
>>> def foo():
... if __name__ == '__main__':
... bar = 1
... foo()
... print 'bar' in globals()
False
于 2012-10-09T19:31:52.947 回答
3
Python 没有块本地范围,因此您在if
块内使用的任何变量都将添加到最近的封闭“真实”范围。(对于一个if..main
块,它们通常是模块的属性。)
于 2012-10-09T19:32:27.440 回答
2
只要满足以下条件,它就在全局范围内:
- 它在全局范围内调用,即不在函数内调用
- 它在正在执行的代码文件中。
为了说明(2):
假设您的代码是 in foo.py
,并且 in bar.py
,您有语句from foo import *
。在这种情况下,不执行if __name__ == "__main__":
块 in 。foo.py
此块仅在运行时foo.py
执行
于 2012-10-09T19:52:55.020 回答