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。

推薦閱讀: