脚本里面经常能看到这句 “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__': ”后面的代码不执行。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐