[英]The scope of if __name__ == __main__
if __name__ == __main__
的范围是什么? 该声明是否涵盖了全球范围内的所有内容?
if __name__ == '__main__'
没有什么特别的。 也就是说,它的范围是由它的发生位置决定的。 由于此类块通常发生在顶层,因此它们的范围是全局的。
如果此块出现在完全合法的函数中,则其范围将是局部的,但__name__
仍将解析为模块中定义的全局值。
>>> 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
Python没有块局部作用域,因此在if
块中使用的所有变量都将添加到最接近的“真实”作用域中。 (对于if..main
块,它们通常是模块的属性。)
只要它在全球范围内:
为了说明(2) :
假设您的代码在foo.py
,在bar.py
,您有from foo import *
的语句。 在这种情况下,不执行foo.py
的if __name__ == "__main__":
块。 仅在运行foo.py
时执行此块
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.