Python中的if __name__ == '__main__'

问题

查看别人的代码经常会出现 if name == 'main',这是什么意思呢,有什么作用?

由于每个python模块(python文件)都包含内置的变量name,当运行模块被执行的时候,name等于文件名(包含了后缀.py)。如果import到其他模块中,则name等于模块名称(不包含后缀.py)。而“main”等于当前执行文件的名称(包含了后缀.py)。所以当模块被直接执行时,name == 'main'结果为真;而当模块被import到其他模块中时,name == 'main'结果为假,就是不调用对应的方法。

测试

我们可以写两个简单的程序来观察这句话的作用:

# a.py
import b

# b.py
print "Hello World from %s!" % __name__

if __name__ == '__main__':
    print "Hello World again from %s!" % __name__

运行它们得到输出:

$ python a.py
Hello World from b!

你可以发现,当一个程序作为模块被导入时,Python将这个模块里的 global()['name'] 设置为模块名,此外,导入后模块中的所有代码都将执行,但此时if语句的条件为False,所以不会执行。

$ python b.py
Hello World from __main__!
Hello World again from __main__!

你可以发现,当程序作为文件被执行时,Python将这个文件里的 global()['name'] 设置为 “main”,此时if条件成立,里面的语句被执行。

参考链接:

1、https://www.shiyanlou.com/questions/102607

2、https://stackoverflow.com/questions/419163/what-does-if-name-main-do

posted @ 2021-01-03 00:08  RioTian  阅读(137)  评论(0编辑  收藏  举报