python中if __name__ == ‘__main__‘ 的理解

if __name__ == '__main__' 的理解

看廖雪峰老师的教程时,他的解释是:

import sys

def test():
    args = sys.argv3
    if len(args)==1:
        print('Hello, world!')
    elif len(args)==2:
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')

if __name__=='__main__':
    test()

当我们在命令行运行hello模块文件时,Python解释器把一个特殊变量__name__置为__main__,而如果在其他地方导入该hello模块时,if判断将失败,因此,这种if测试可以让一个模块通过命令行运行时执行一些额外的代码,最常见的就是运行测试
感觉不是很清晰,所以我试图清晰一下—_—:
他的作用是:
1.作为脚本直接执行
2.是导入( import) 到其他的 python 脚本中时被调用(模块重用)执行。
也就是说,这段代码是在脚本被直接执行或被调用时起作用,直接执行if判断为真,被调用if判断为假不执行。
例子:

'yy.py'
# -*- coding: utf-8 -*-

print('我在if __name__ == \'__main__\'外')
print(__name__)
print(__name__== '__main__')

if __name__ == '__main__':
    print( '我在if __name__ == \'__main__\'内')
'直接执行结果:'
我在if __name__ == '__main__'外
__main__
True
我在if __name__ == '__main__'

可以看到if __name__ == '__main__':语句上下都执行了,且在直接执行脚本时,Python解释器把__name__置为__main__,if判断为真

把yy.py模块导入到cc.py中:

'cc.py'
# -*- coding: utf-8 -*-
import yy

print(__name__)
print(__name__=='__main__')

'执行结果:'
我在if __name__ == '__main__'#yy.py
yy #yy.py yy.py模块被其他脚本调用时,__name__等于文件名
False#yy.py  __name__不等于'__main__'
__main__
True

可以看到if __name__ == '__main__':语句只有上面被执行了,if __name__ == '__main__'内没有被执行。

总结:
要弄清晰亿点点。应该先知道,'__main__'是等于当前执行文件的名称(包含了后缀.py)。
因此:
当脚本yy.py被直接执行时:__name__被置为'__main__',都等于文件名(包含了后缀.py),也就是yy.py.
当yy.py被导入到其他脚本(这里是cc.py)时,再执行cc.py时,调用yy模块,yy模块的__name__被置为文件名(yy,而不包含后缀.py),因此两者不相等,也就不会继续向下执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值