方格精選

為甚麼很多程式碼都有if __name__ == '__main__': ?

更新於 發佈於 閱讀時間約 2 分鐘
前言

今天的前言一樣是可以跳過的,坐下來寫文章的原因是因為正在coding中,但有個地方錯誤怎麼都找不出問題,只好沉靜下來放鬆心思,寫一個簡單的程式概念,也算是利用發散模式解決問題,發散模式是我最近正在閱讀”學習如何學習”中提到的,也許有時間也可以說說我如何實踐該本書的學習方式。

正文開始囉

一個檔案通常有兩種操作,一個是被執行,另一種則是被引用。

在python引用一個檔案,有一件事值得注意:該檔案被引用時,檔案內的每一行都會被python直譯器讀取並執行。假如我在B檔案寫一個function,而我在A檔案要使用該function於是引用B檔案,並且執行A檔案,依照前面的邏輯,那不就等於這個B檔案function會被執行兩次!?下面會說明我們如何防止B被執行兩次,這就是為甚麼常看見if __name__ == '__main__': ?

Python 直譯器執行程式碼時,有一些隱藏的變數,模組名稱__name__就是其中一個,在不同情況,這個隱藏變數__name__會有所不同。

  1. 當檔案是被直接執行:__name__ = __main__。
  2. 當檔案是被引用執行:__name__ = 檔名。

用上述來寫一個範例,有AB兩個python檔如下。

raw-image

當我沒有利用if __name__ == '__main__':,而執行A檔案,結果如下圖,可以看到A檔案__name__ = __main__,B檔案的function被執行兩次,且__name__ = 檔名。

raw-image

如果我們將B檔案改寫一下利用if __name__ == '__main__': ,再重新執行一次程式,結果如下,B檔案就不會因為被引用而多執行一次在B檔案就有用到的function。

raw-image
留言
avatar-img
留言分享你的想法!
avatar-img
薰魚的沙龍
10會員
17內容數
關於多益的單字整理、記憶方法、心路歷程、英文的基礎概念。
薰魚的沙龍的其他內容
2021/09/24
邊緣與輪廓檢測 edge detection
Thumbnail
2021/09/24
邊緣與輪廓檢測 edge detection
Thumbnail
2021/09/20
編譯器與直譯器
Thumbnail
2021/09/20
編譯器與直譯器
Thumbnail
2021/09/12
物件導向的概念,以python程式為範例。
Thumbnail
2021/09/12
物件導向的概念,以python程式為範例。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
Python 基本語法 python 語法的後綴名是以.py 結尾 python 執行方式 使用交互介面執行 使用 python test.py 命令執行 使用./test.py 執行 python 標示符 以單下劃線開頭的屬性,表示是類的私有屬性(包括方法,變量)。如:_foo表示不能直接訪問的類
Thumbnail
Python 基本語法 python 語法的後綴名是以.py 結尾 python 執行方式 使用交互介面執行 使用 python test.py 命令執行 使用./test.py 執行 python 標示符 以單下劃線開頭的屬性,表示是類的私有屬性(包括方法,變量)。如:_foo表示不能直接訪問的類
Thumbnail
大型程式的開發通常不會由一個人獨力完成,而是將程式依功能拆分成不同的函數或是類別,由不同人協力開發成各個模組,最後再將這些模組導入主程式,或是直接套用現有的模組。模組依來源可以分成三大類: Python內建的模組 外部模組,需從第三方的軟體儲存庫(如PyPI)並安裝使用 程式開發者自行開發的模組
Thumbnail
大型程式的開發通常不會由一個人獨力完成,而是將程式依功能拆分成不同的函數或是類別,由不同人協力開發成各個模組,最後再將這些模組導入主程式,或是直接套用現有的模組。模組依來源可以分成三大類: Python內建的模組 外部模組,需從第三方的軟體儲存庫(如PyPI)並安裝使用 程式開發者自行開發的模組
Thumbnail
隨著程式的功能愈來愈複雜,程式碼也愈來愈多,若程式從頭寫到尾沒有任何的段落,可讀性會愈來愈差,甚至會發現同樣的一段程式碼重覆很多遍,因為類似的功能區塊在程式中可能會一再出現。這樣的程式碼不利於多人的協作開發,即使是寫作者本身在一段時間後回來看,可能也難以一眼就掌握程式的主要架構。
Thumbnail
隨著程式的功能愈來愈複雜,程式碼也愈來愈多,若程式從頭寫到尾沒有任何的段落,可讀性會愈來愈差,甚至會發現同樣的一段程式碼重覆很多遍,因為類似的功能區塊在程式中可能會一再出現。這樣的程式碼不利於多人的協作開發,即使是寫作者本身在一段時間後回來看,可能也難以一眼就掌握程式的主要架構。
Thumbnail
  在寫程式時最重要的就是一開始的基本語法,今天要介紹的是if判斷式的基本用法,用起來非常簡單。
Thumbnail
  在寫程式時最重要的就是一開始的基本語法,今天要介紹的是if判斷式的基本用法,用起來非常簡單。
Thumbnail
該篇文章首要為 1.下載python與文字編輯器vs code (Visual Studio Code) 2.撰寫第一支python程式
Thumbnail
該篇文章首要為 1.下載python與文字編輯器vs code (Visual Studio Code) 2.撰寫第一支python程式
Thumbnail
int main()、註解//、include 、命名空間、using namespace
Thumbnail
int main()、註解//、include 、命名空間、using namespace
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News