对“if __name__ ==‘__main__‘ “的理解

我们在学习python的时候,在代码的结尾,我们总会遇到这么一行代码。

if __name__=='__main__':
test( )

我第一次看见这行代码是懵逼的,不知道这句话要干嘛,而且看着 name 前后都带两个下划线的形式也很不常见,找了网上的解释,也没有说的特别明白的,要么很理论感觉看完不是很清楚。

首先,这样前后都加两个下划线的写法 "__name__" 在python中表示特殊变量,是可以直接引用的,显然我们平时用的变量不要用这种形式来表示。

这句代码的意思是我们通过判断特殊变量 __name__ 为 __main__,也就是判断是否是主模块,然后来运行一段代码模块,如果在其他地方导入这一段代码模块,判断将失败,这一模块将不能运行。

通俗说就是,我们可以用把一个 python 文件 (.py) 当作主模块直接运行, 这时 if 语句后面会自动执行。但是如果我们在其他 python 文件运行刚才的模块时,刚才的模块就不是主模块 "__main__", 那我们的 if 语句就判断失败,if 后面的语句也就不会执行。

我们可以写一个简单的模块来验证我们的说法。

首先,我们先来写一个简单的乘法模块。

图1-1

然后将这个乘法模块保存为 firsttest.py 文件, 我们再来写一个模块引用这个文件。

图1-2

我们可以看到这个新模块可以引用第一个模块的乘法,而且也可以输出第一个模块的结果。

接下来,我们对乘法模块进行改动,加上我们的代码语句 ”__name__=='__main__' ", 我们将新的乘法模块保存为 firsttestnew.py 文件。

图1-3

然后再用测试模块引用我们改动后的乘法模块,我们可以观察我们的测试用例的结果发生了变化。

图1-4

由图 1-4 我们可以发现,我们测试用例引用乘法模块只能得到新代码的结果,不会得到之前乘法模块的结果了,因为我们再执行新代码引用乘法模块的时候,代码语句 ”__name__=='__main__' " 判断为 False,我们不执行 if 后续的代码。

由此,可以看出,代码语句 ”__name__=='__main__' " 的主要功能是让我们运行当前模块,从而我们引用模块的时候不会产生其他的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值