淺析Python中的main函數

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章