if __name__ == __main__的范围

时间:2012-10-09 19:29:26

标签: python scope

if __name__ == __main__的范围是什么?这个陈述在全球空间中是否涵盖了所有内容?

4 个答案:

答案 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)

只要符合全球范围:

  1. 在全局范围内调用它,即不在函数
  2. 中调用
  3. 它位于正在执行的代码文件中。
  4. 举例说明(2)

    假设您的代码位于foo.py,而bar.py则代码为from foo import *。在这种情况下,if __name__ == "__main__":中的foo.py块不会被执行。该块仅在foo.py运行时执行