【Python】中“ if __name__ == '__main__': ” 的理解

引言

在学Python时看到很多代码的最后一部分都会写if __name__ == '__main__':,如果我不这么写又没任何影响。那这段代码到底有何意义呢?带着疑问我查看了很多人写的博客,在这里我就总结一下我个人的理解。

理解

__name__是什么呢?
通过它的书写格式,我们可以判断它是一个系统内部的特殊变量。因为变量以双下划线开头并以双下划线结尾,我们可以直接访问它,但不可以对它进行修改。

那我很好奇if __name__ == '__main__'这段代码是if语句,那它究竟在什么时候成立呢?我们拿以下两段代码进行举例分析。

# !/usr/bin/env python3
# -*- coding:UTF-8 -*-
# code1.py
def hello1():
    print('Hello1')

def hello2():
    print('Hello2')

hello1()
print(__name__)

if __name__ == '__main__':
    hello2()
    hello1()

在执行上面这段代码时,输出结果为

Hello1
__main__
Hello2
Hello1

也就是说,在执行本段程序时,__name__变量的值为__main__。那什么时候__name__变量的值不为__main__呢?

# !/usr/bin/env python3
# -*- coding:UTF-8 -*-
# code2.py
import code1                    # 导入code1
print('--------------------------')
print(code1.__name__)           # code2调用code1中的__name__
print('--------------------------')
print(__name__)                  # code2调用本身的__name__

输出为

Hello1
code1
--------------------------
code1
--------------------------
__main__

import code1后,自动执行了code1内部的两段代码hello1()print(__name__)
code2中调用code1中的__name__时,输出为code1
也就是说,在本文件中调用本文件的__name__时,__name____main__;在本文件中调用其他文件的__name__时,__name__为被调用文件的名字。

也可以这么理解

假如当前模块是主模块(也就是调用其他模块的模块),那么此模块名字就是__main__,通过if判断这样就可以执行“mian:”后面的主函数内容;假如此模块是被import的,则此模块名字为文件名字(不加后面的.py),通过if判断这样就会跳过“mian:”后面的内容。

听起来有点绕口,不太好理解,可以通过自己编写代码尝试一下。

目的

那这么做的目的是什么呢?

  1. 保证代码的规范性。
  2. 在编写一个Python文件时,我们想在执行这个文件时就有相应的输出,但并不希望在其他文件调用该文件时也有这个输出,那我们就可以将这个内容写在if __name__ == '__main__':里。
  3. 在编写库的时候,为了方便测试,我们也可以在if __name__ == '__main__':里写测试函数的内容,并且这个函数并不影响主函数对这个库的调用。

以上内容为个人理解,如有错误,欢迎指点~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望天边星宿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值