2019年5月2日 星期四

簡易理解python中的if __name__ == 'main' 的作用和原理

從學到python以來,常常看到很多函式(function)中出現以下的語句

if __name__ == '__main__':

雖然一直知道他是用來做甚麼的,但是卻不太能理解他的作動原理

舉個例子,我們創建一個test.py然後寫入以下程式:

print('我愛Python')

def love():
    print('我愛Python')
if __name__ == '__main__':
    love()

    print('天天寫扣的,越來越愛python')


然後執行程式


我們可以看到輸出結果如下





然後,在同一層的資料夾新建名稱為import_test.py的檔案,只輸入以下程式:
import test

最後我們打開anaconda Prompt來比較兩者的差異



兩者相比較,import_test.py,只有輸出我愛Python,也就是if __name__=="__main__": 之前的語句被執行,之後的沒有被執行。

這是為甚麼呢?

我們來用用萬用的print

我們在test.py檔案的if __name__=="__main__":之前加入print __name__,即將__name__列印出來









則最後執行結果如下:



可以看出,此時變數__name__的值為"__main__"

再執行import_test.py





此時,import_test.py中的__name__變數為test,不滿足__name__=="__main__"的條件,因此無法執行後面的程式。


簡而言之就是:__name__ 是當前檔案名,當檔案被直接運行時檔案名為__main__ 。

當檔案被直接運行時,程式將被運行,當檔案是被導入進來時,程式不被運行。

3 則留言:

  1. 那導入的部分可以把__name__="__main__"嗎?
    所以在開專案的時候name就會被寫入main了嗎?

    回覆刪除
  2. 那為什麼一定要寫 __name__ = '__main__'?

    回覆刪除

經濟日報數位訂閱懶人包

  去年寫過一篇介紹文,經濟日報推出了數位訂閱產品,如果你是價值投資者,或是對產業研究及經濟數據有興趣的朋友,包含深耕國內外財經深度內容、圖像式產業資料庫、早安經濟日報聽新聞等等。   目前有「彭博新聞獨家聯名、七大外媒授權合作、專家解析深度專欄」三大內容,豐富你的關鍵投...