繁体   English   中英

if __name__ == __main__的范围

[英]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块,它们通常是模块的属性。)

只要它在全球范围内:

  1. 在全局范围内调用它,即不是从函数内部调用
  2. 它在正在执行的代码文件中。

为了说明(2)

假设您的代码在foo.py ,在bar.py ,您有from foo import *的语句。 在这种情况下,不执行foo.pyif __name__ == "__main__":块。 仅在运行foo.py时执行此块

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM