在大多數編排得好一點的指令碼或者程式裡面都有這段if __name__ == 'main': ,雖然一直知道他的作用,但是一直比較模糊,收集資料詳細理解之後與大家分享。
1、這段**的功能
乙個python的檔案有兩種使用的方法,第一是直接作為指令碼執行,第二是import到其他的python指令碼中被呼叫(模組重用)執行。因此if __name__ == 'main': 的作用就是控制這兩種情況執行**的過程,在if __name__ == 'main': 下的**只有在第一種情況下(即檔案作為指令碼直接執行)才會被執行,而import到其他指令碼中是不會被執行的。
舉個例子,下面在test.py中寫入如下**:
print "i'm the first."
if __name__=="__main__":
print "i'm the second."
並直接執行test.py,結果如下圖,可以成功print兩行字串。即,if __name__=="__main__": 語句之前和之後的**都被執行。
然後在同一資料夾新建名稱為import_test.py的指令碼,只輸入如**:
import test
執行import_test.py指令碼,輸出結果如下:
只輸出了第一行字串。即,if __name__=="__main__": 之前的語句被執行,之後的沒有被執行。
2、執行的原理
每個python模組(python檔案,也就是此處的test.py和import_test.py)都包含內建的變數__name__,當執行模組被執行的時候,__name__等於檔名(包含了字尾.py);如果import到其他模組中,則__name__等於模組名稱(不包含字尾.py)。而「__main__」等於當前執行檔案的名稱(包含了字尾.py)。進而當模組被直接執行時,__name__ == 'main'結果為真。
同樣舉例說明,我們在test.py指令碼的if __name__=="__main__":之前加入print __name__,即將__name__列印出來。檔案內容和結果如下,
可以看出,此時變數__name__的值為"__main__";
再執行import_test.py,模組內容和執行結果如下:
UML雜七雜八
各種分析的角度 目的。1 用例分析,是整個系統層次的功能 使用者的分析 2 靜態分析是對系統實現過程中對類層次的分析,它關注各個實現類的基本性情及各個類之前的關係 關聯 組合 聚合 泛化。3 活動分析是對系統功能業務及業務流和的分析,它是對物件層次的分析。這裡面引入了事件 時候的因素了 4 元件分析...
RTSP雜七雜八
1755埠 1755埠預設情況下用於 microsoft media server 微軟 伺服器,簡稱mms 554埠預設情況下用於 real time streaming protocol 實時流協議,簡稱rtsp 試試下面的方法 開始 控制面板 網路和撥號鏈結 右鍵點選你當前用的網路,點屬性 選...
雜七雜八 新年
新年快到了,從2014 到 2015 大學只有一半的時間了!我想分享這麼一首歌 那年的願望 口琴真的很讚,讓人憂傷的一首歌 那年的願望 歌手 好妹妹樂隊 詞曲 王小洋 編曲 黃立煒 如今的我總是感到迷惑 像陣風 不知明天的方向 有時失落 偶爾沉默 孤單 現實的重量 踏在微弱的肩上 誰在追趕 誰在旁觀...