python if main_Python:if __name__ == '__main__'
簡介:
__name__是當前模塊名,當模塊被直接運行時模塊名為_main_,也就是當前的模塊,當模塊被導入時,模塊名就不是__main__,即代碼將不會執行。
關于代碼if __name__ == '__main__': 下面舉幾個例子解釋下:
先編寫一個測試模塊add1.py
#!/usr/bin/env python3#-*- coding: utf-8 -*-
'a test module'
defaddFunc(a,b):return a+bprint('add1計算結果:',addFunc(1,1))
再編寫一個模塊add2.py來調用上面的模塊:
#!/usr/bin/env python3#-*- coding: utf-8 -*-
'a test module'
importadd1print('調用add1模塊執行的結果是:',add1.addFunc(12,23))
在剛才兩個模塊的路徑(我的路徑為:“C:\work”)中打開cmd,用命令行運行add1.py:
C:\work>python add1.py
add1計算結果:2
在剛才兩個模塊的路徑中打開,用命令行運行add2.py:
C:\work>python add2.py
add2計算結果:2調用add1模塊執行的結果是:35
#顯然,當我運行add2.py后第一句并不是調用者所需要的,為了解決這一問題,Python提供了一個系統變量:__name__ #注:name兩邊各有2個下劃線__name__有2個取值:當模塊是被調用執行的,取值為模塊的名字;當模塊是直接執行的,則該變量取值為:__main__
于是乎,被調用模塊的測試代碼就可以寫在if語句里了,如下:
#!/usr/bin/env python3#-*- coding: utf-8 -*-
'a test module'
defaddFunc(a,b):return a+bif __name__ == '__main__':print('add1計算結果:',addFunc(1,1))
當再次運行add1.py:
C:\work>python add1.py
add1計算結果:2
#結果并沒有改變,因為調用add1.py時,__name__取值為__main__,if判斷為真,所以就輸出上面的結果
當再次運行add2.py:
C:\work>python add2.py
調用test模塊執行的結果是:35
#此時我們就得到了預期結果,不輸出多余的結果。能實現這一點的主要原因在于當調用一個module時,此時的__name__取值為模塊的名字,所以if判斷為假,不執行后續代碼。
所以代碼iif __name__ == '__main__': 實現的功能就是Make a script both importable and executable,也就是說可以讓模塊既可以導入到別的模塊中用,另外該模塊自己也可執行。
學過c語言的話,可以知道C語言定義主程序入口就是main()函數,main代表了程序主入口,即和系統的接口(說白了就是命令行直接調用)。if name == 'main': 這句話的核心無非就是在判斷該程序文件是否作為主程序入口罷了。 如果在命令行直接調用該程序文件,該文件作為主程序入口,name == 'main'理所當然啊。 如果在命令行調用其他程序文件,主程序入口name == 'main'自然不成立,因為main等于那個你在命令行輸入的程序名。 這個東西的好處就是,別人調用時(你并非是主程序入口)后面的東西不運行,自己命令行執行時(你是主程序入口)后面的東西運行。故可以作為測試用。
總結
以上是生活随笔為你收集整理的python if main_Python:if __name__ == '__main__'的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 波音日子太难过:无奈把飞机总部给卖了
- 下一篇: 告别华为落户电信!中国电信麦芒10发布: