为什么要写if __name__ == "__main__"?

写python的同学肯定遇到过if __name__ == "__main__",但是为什么要这样写呢?

当我们这样写的时候,执行一个ptyhon文件,Python interpreter读取文件,要做两件事:

  • 设置几个特别的变量,比如 __name__,然后
  • 执行里面的代码

代码实例

我们写一个这样的foo.py.

# foo.py
print("before import")
import math

print("before functionA")
def functionA():
    print("Function A")

print("before functionB")
def functionB():
    print("Function B {}".format(math.sqrt(100)))

print("before __name__ guard")
if __name__ == '__main__':
    functionA()
    functionB()
print("after __name__ guard")

特殊的变量

在ptyhon执行代码的时候,python interpeterd读取文件,定义变量,比如__name__.

  • 当你运行代码
    python foo.py
    
    interpreter会设置一个硬编码字符串"__main__"给__name__.
    __name__="__main__"
    
  • 当导入到其他模块
    import foo
    
    这个时候分配的变量就变成了文件名
    __name__="foo"
    

两种情况执行结果:

#直接运行
before import
before functionA
before functionB
before __name__ guard
Function A
Function B 10.0
after __name__ guard

#导入其他模块
before import
before functionA
before functionB
before __name__ guard
after __name__ guard

文章翻译自:https://stackoverflow.com/questions/419163/what-does-if-name-main-do

声明:原创文章,版权所有,转载请注明出处,https://litets.com。