详细探究if __name__ == ‘__main__’的意义
感谢BV1T66mYpE7s给的启发。

在静态语言中,每个程序必须要写一个main()函数,用来指代程序的入口。

#include <stdio.h>
 
int main() {
    printf("Hello, World!\n");
    return 0;
}

但是动态语言就不是这样的了,例如Python,不强制写main()函数,直接0帧起手。

print('Hello, World')

但是这不代表main()函数被移除了,而是以另一种方式存在,一个看起来比较奇怪的判断语句:

if __name__ == '__main__':
    print('Hello, World')

我之前也知其然而不知其所以然,只知道这是main()函数的精神遗产,却不知道背后的原理和作用,但经过学习,是时候揭开那神秘的面纱了。

__name__是什么?

__name__其实是一个变量,但这个变量是自带的,不需要额外声明,类似于环境变量。

我们写一个简单的程序,文件名就叫pkg.py吧:

print(__name__)

运行pkg.py

__main__

因此,现在__name__等于'__main__'

这是一个不错的起点,我们再创建一个新的.py文件,把pkg.py当模块去导入:

import pkg

运行这个新文件,输出居然有了变化:

pkg

因此,现在__name__等于'pkg'

可以推测,__name__会随着整个项目的入口文件而改变,如果自己就是入口文件,就返回'__main__',如果自己是个模块,就返回模块名(字符串)。

结论是,if __name__ == '__main__':翻译过来就是如果自己是入口文件,就执行以下代码块,反之亦然。

这有什么用?

对于既是模块,又可能被直接运行的文件,可以将直接运行的代码放在if __name__ == '__main__':下,这样当模块用的时候,就不会执行直接运行的代码了。

注意:
除非另有声明,本文可以自由使用、转载和二次创作,但需注明作者,并以相同许可协议分享,且不得用于商业目的。详情请参阅:CC BY-NC-SA 4.0许可协议。

- 标题:详细探究if __name__ == ‘__main__’的意义
- 作者:Pinpe
- 链接:https://blog.pinpe.top/4096/
成为第一个评论的人吧!

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
呼呼
上一篇
下一篇