if __name__ == __main__
的范围是什么?这个陈述在全球空间中是否涵盖了所有内容?
答案 0 :(得分:11)
if __name__ == '__main__'
块没有什么特别之处。也就是说,它的范围取决于它发生的位置。由于此类块通常发生在顶层,因此它们的范围是全局的。
如果这个块发生在一个完全合法的函数中,它的作用域将是本地的 - 除了__name__
仍将解析为模块中定义的全局值。
答案 1 :(得分:5)
>>> 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
答案 2 :(得分:3)
Python没有块本地范围,因此您在if
块中使用的任何变量都将添加到最近的封闭“实际”范围中。 (对于if..main
块,它们通常是模块的属性。)
答案 3 :(得分:1)
只要符合全球范围:
举例说明(2):
假设您的代码位于foo.py
,而bar.py
则代码为from foo import *
。在这种情况下,if __name__ == "__main__":
中的foo.py
块不会被执行。该块仅在foo.py
运行时执行