python 中“if __name__==‘__main__‘: ”作用和原理

脚本里面经常能看到这句 “if __name__=='__main__':” ,对这段代码的理解一直比较模糊,今天有空,查看了一些资料,先记下以作日后查看。

一、实现效果

首先看这段代码的实现效果,大家都知道我们的python代码既可以作为脚本单独运行,也可以被其python脚本 import 调用,而 “if __name__=='__main__':” 的作用便是控制这两种情况下执行代码的过程,举例:

新建文件:test_a.py

#!/usr/bin/env python
# _*_ encoding: utf-8 _*_

print("hello,张三")

if __name__ == '__main__':
    print("hello,李四")

 第一种情况,作为脚本独立运行,其输出结果为:

hello,张三
hello,李四

新建文件:test_b.py

#!/usr/bin/env python
# _*_ encoding: utf-8 _*_

import test_a

if __name__ == '__main__':
    print("hello,王五")

第二种情况,test_a被其他python脚本import调用时,输出结果为:

hello,张三
hello,王五

可见,test_a中的  “hello,李四”  没有输出,故在一个python脚本被其他脚本import 调用时,该脚本“if __name__=='__main__': 后的代码不会执行,而该脚本独立运行时,“if __name__=='__main__': 后的代码会执行。

二、运行原理

每个python模块都包含内置的变量'__name__',当该模块被直接执行的时候,__name__等同于文件名(包含后缀.py),如果该模块被import到其他模块中,则该模块的__name__等于模块名称(不包含后缀.py),而“__main__”始终指向当前执行模块的名称(包含后缀.py),当模块被直接执行时,__name__ == '__main__' 结果为真。

我们在test_a中打印'__name__',看看结果:

#!/usr/bin/env python
# _*_ encoding: utf-8 _*_
print("hello,张三")
print(__name__)
if __name__ == '__main__':
    print("hello,李四")

输出:

hello,张三
__main__
hello,李四

而此时我们再直接运行test_b脚本,其中引用了test_a,其输出为:

hello,张三
test_a
hello,王五

此时,test_a中的__name__ 为test_a,__name__== '__main__' 为假,test_a中 “if __name__=='__main__': ”后面的代码不执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

旋转小马

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

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

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

打赏作者

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

抵扣说明:

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

余额充值