if __name__ == __main___终于搞懂了Python脚本里的if __name__ == #39;__main__#39;
經常在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()函數被運行,結果如下:
第二步:直接執行main_test.py,my_fun()函數沒有被運行,結果如下:
由此可以看出,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()函數:
第四步:再次執行main_test.py,結果如下:
可以看到在import print_array時,print_array.py中的my_fun()函數同時被運行了。
總結
通過以上幾個步驟,可以看出if __name__ == '__main__' 在腳本中起到的作用。
模塊作為腳本獨立執行時,__name__ == '__main__'的結果為True,if中的語句會被運行。
模塊作為被其他腳本調用的子模塊時,腳本文件中的__name__?==?'__main__'的結果為False,if中的語句不會被運行。
因此,如果模塊不存在被調用的場景,這句話可以省略。如果存在被調用的場景,那么是必不可少的。
總結
以上是生活随笔為你收集整理的if __name__ == __main___终于搞懂了Python脚本里的if __name__ == #39;__main__#39;的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stdmove 跟 左键引用 区别_Ja
- 下一篇: shell在二级python_在Shel