Python中的main函數與import用法
main函數與import用法
在python中,如果自己封裝的庫文件中有函數外的語句,那麼這些語句是會在庫函數被導入時自動執行的,這樣就會出現一些奇怪的問題,一個例子如下所示。
目錄結構如下
- A.py
- B.py
B.py中的內容如下:
def print_B(): print("B") print("starting B")
A.py中使用import導入print_B()方法:
from B import print_B print_B()
結果如下:
starting B
B
可以發現B.py中的函數外語句是會自動先執行的。但有時候我們確實希望直接運行封裝的庫能夠執行某些功能,但又不希望這些功能在被import的時候被觸發,這個時候,就可以把這部分功能顯式的放在main方法中。
修改後的B.py如下所示:
def print_B(): print("B") if __name__ == "__main__": print("starting B")
此時運行A.py,結果如下:
B
main函數的作用以及解釋
python 中name == ‘__main__’ 的作用
- 經典的英文解釋:Make a script both importable and executable
- 中文解釋:使腳本可以被調用import並且也可以直接運行
1、直接運行
# cat test_fun.py def fun(): print(__name__) print('this is fun') if __name__ == '__main__': fun() print('this is main')
python test_fun.py __main__ this is fun this is main
2、被調用import
>>> import test_fun >>> test_fun.fun() test_fun this is fun
調用導入時:此處輸出沒有顯示”main“,也就是說模塊name = ‘main’ 下面的代碼並未執行,main函數沒有執行。
這個功能還有一個用處:
調試代碼的時候,在”if name == ‘main‘“中加入一些我們的調試代碼,我們可以讓外部模塊調用的時候不執行我們的調試代碼,但是如果我們想排查問題的時候,直接執行該模塊文件,調試代碼能夠正常運行!
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。