方格精選

為甚麼很多程式碼都有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檔如下。

vocus|新世代的創作平台

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

vocus|新世代的創作平台

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

vocus|新世代的創作平台
留言
avatar-img
薰魚的沙龍
11會員
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
我們來解析Python官方文件的英文句子吧!怎麼寫美美的code的PEP 8的引文
Thumbnail
我們來解析Python官方文件的英文句子吧!怎麼寫美美的code的PEP 8的引文
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
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
隨著程式的功能愈來愈複雜,程式碼也愈來愈多,若程式從頭寫到尾沒有任何的段落,可讀性會愈來愈差,甚至會發現同樣的一段程式碼重覆很多遍,因為類似的功能區塊在程式中可能會一再出現。這樣的程式碼不利於多人的協作開發,即使是寫作者本身在一段時間後回來看,可能也難以一眼就掌握程式的主要架構。
Thumbnail
隨著程式的功能愈來愈複雜,程式碼也愈來愈多,若程式從頭寫到尾沒有任何的段落,可讀性會愈來愈差,甚至會發現同樣的一段程式碼重覆很多遍,因為類似的功能區塊在程式中可能會一再出現。這樣的程式碼不利於多人的協作開發,即使是寫作者本身在一段時間後回來看,可能也難以一眼就掌握程式的主要架構。
Thumbnail
  在寫程式時最重要的就是一開始的基本語法,今天要介紹的是if判斷式的基本用法,用起來非常簡單。
Thumbnail
  在寫程式時最重要的就是一開始的基本語法,今天要介紹的是if判斷式的基本用法,用起來非常簡單。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
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