Python作為一門較為靈活的解釋型腳本語言,其中定義的main()函數只有當該Python腳本直接作為執行程序時才會執行;
當該python腳本被作為模塊(module)引入(import)時,其中的main()函數將不會被執行。
這是由於兩方面原因,一方面,main函數是所有執行程序的入口;另一方面,python的解釋器是順序執行腳本的並且不會調用任何不屬於程序本身的代碼和函數,需要補充說明的一點是,如果是被作為一個模塊或庫import到程序中,則會直接成為代碼的一部分。
下面可以通過程序來更好地了解main函數的作用,這里我們編寫兩段程序print_main_function.py和print_main_module.py
print_main_function.py
# import os # import time import datetime print('Hello World!') print('Time is ', datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S %A')) print('__name__ value: ', __name__) def main(): print('this message is from main function') if __name__ == '__main__': main() # print(__name__)
print_main_module.py
import print_main_function print("Done!")
單獨運行print_main_function.py程序,結果如下
運行print_main_module.py程序(將print_main_function.py作為module引入執行),結果如下
對比兩段程序運行結果可發現,當直接運行包含main函數的程序時,main函數會被執行,同時程序的__name__變量值為'__main__'。
當包含有main函數的程序被作為module被import時,該module程序(print_main_function.py)對應的__name__變量值為該module對應的函數名稱,因此該module程序(print_main_function.py)中的main函數不會被執行。
結論:因此需要注意的是,python程序是逐行執行的,因此事先定義main()函數很重要,以防程序中有if條件語句去執行main()函數,這樣就可以避免程序執行報錯NameError: name "main" not defined