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 @   RioTian  阅读(138)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
点击右上角即可分享
微信分享提示

📖目录