if __name__ == __main___终于搞懂了Python脚本里的if __name__ == '__main__'

经常在Python脚本的最后看到有这样的语句:

if __name__ == '__main__':    main()

那么这是什么意思呢?

__name__是什么?

__name__是当前模块(脚本文件)的一个属性,当直接运行当前脚本时,__name__的值是'__main__'。

而当当前模块(脚本文件)被其他脚本import时,它的__name__属性的值为模块名。

举个例子:

脚本文件1:print_array.py

脚本文件1定义了一个名为my_fun()的函数。

#!/usr/bin/env python#-*- coding:utf-8 -*-import numpy as npdef my_fun():    n =  input("Input a single positive odd integer greater than 2: ")    while True:        try:            n = int(n)            if (int(n) % 2 == 0 or int(n) < 2):                n = input("Oops, you have given a WRONG number! Please input a single positive odd integer greater than 2: ")            else:                break        except:            n = input("Oops, you have given a WRONG number! Please input a single positive odd integer greater than 2: ")    print ("n = %s" %n)    a = np.zeros((n, n), dtype=int)    m = n // 2    a[:, m] = 1    a[m, :] = 1    print (a)def main():  my_fun()if __name__ == '__main__':  main()

脚本文件2:main_test.py

脚本文件2对脚本文件1进行了调用。

#!/usr/bin/env python#-*- coding:utf-8 -*-import print_arrayprint (print_array.__name__)print (__name__)

开始测试:

第一步:直接执行print_array.py,my_fun()函数被运行,结果如下:

0db5da9163b01f91263b7ed27da501b4.png

第二步:直接执行main_test.py,my_fun()函数没有被运行,结果如下:

7928f7ba96860e83c471f233ddea4f80.png

由此可以看出,print_array.py中增加了对__name__属性的判断后,在被main_test.py调用时,不会运行my_fun()函数。

同时,在执行main_test.py时,pring_array的__name__属性的值为'print_array',而main_test.py本身的__name__属性值为'__main__'。

第三步:对print_array.py作一些修改,去掉对__name__属性的判断,改为直接运行my_fun()函数:

b6980fe15b292358a070519fab6c56b6.png

第四步:再次执行main_test.py,结果如下:

4616918fe209092385f6d4ceebd88fdd.png

可以看到在import print_array时,print_array.py中的my_fun()函数同时被运行了。

总结

通过以上几个步骤,可以看出if __name__ == '__main__' 在脚本中起到的作用。

模块作为脚本独立执行时,__name__ == '__main__'的结果为True,if中的语句会被运行。

模块作为被其他脚本调用的子模块时,脚本文件中的__name__ == '__main__'的结果为False,if中的语句不会被运行。

因此,如果模块不存在被调用的场景,这句话可以省略。如果存在被调用的场景,那么是必不可少的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值