python模組匯入__name__

來源:互聯網
上載者:User

主程式碼通常都和你前面看到的代碼相似,檢查 __name__ 變數的值然後再執行相應的調用(參閱下一頁的核心筆記)。主程式中的代碼通常包括變數賦值, 類定義和函數定義,隨後檢查__name__來決定是否調用另一個函數(通常調用main()函數)來完成該模組的功能。主程式通常都是做這些事。(我們上面的例子中使用test()而不是main()是為了避免你在讀到核心筆記前感到迷惑。) 不管用什麼名字,我們想強調一點那就是:這兒是放置測試代碼的好地方。我們在3.4.2 小節中曾經說過,大部分的Python 模組都是用於匯入調用的,直接運行模組應該調用該模組的迴歸測試代碼。

 

由於主程式碼無論模組是被匯入還是被直接執行都會運行, 我們必須知道模組如何決定運行方向。一個應用程式可能需要匯入另一個應用程式的一個模組,以便重用一些有用的代碼(否則就只能用拷貝粘貼那種非物件導向的愚蠢手段)。這種情況下,你只想訪問那些位於其它應用程式中的代碼,而不是想運行那個應用程式。因此一個問題出現了,“Python 是否有一種方法能在運行時檢測該模組是被匯入還是被直接執行呢?” 答案就是......(鼓聲雷動).....沒錯! __name__ 系統變數就是正確答案。
如果模組是被匯入, __name__ 的值為模組名字
如果模組是被直接執行, __name__ 的值為 '__main__'

 

所有的 Python
模組都是對象並且有幾個有用的屬性。 您可以使用這些屬性方便地測試您所書寫的模組。 下面是一個使用 if
__name__
的技巧。

if __name__ == "main":

在繼續學習新東西之前, 有幾點重要的觀察結果。 首先, if
運算式無需使用圓括弧括起來。 其次, if
語句以冒號結束, 隨後跟隨的是縮排代碼。

與 C

一樣, Python
使用 ==
做比較, 使用 =
做賦值。 與 C

不一樣, Python
不支援行內賦值, 所以不會出現想要進行比較卻意外地出現賦值的情況。

那麼為什麼說這個特殊的 if
語句是一個技巧呢?模組是對象, 並且所有的模組都有一個內建屬性 __name__
。一個模組的 __name__
的值要看您如何應用模組。如果 import
模組, 那麼 __name__
的值通常為模組的檔案名稱, 不帶路徑或者副檔名。但是您也可以像一個標準的程式一樣直接運行模組, 在這種情況下 __name__
的值將是一個特別的預設值, __main__

>>> import odbchelper>>> odbchelper.__name__'odbchelper'

一旦瞭解到這一點, 您可以在模組內部為您的模組設計一個測試套件, 在其中加入這個 if
語句。當您直接運行模組, __name__
的值是 __main__
, 所以測試套件執行。當您匯入模組, __name__
的值就是別的東西了, 所以測試套件被忽略。這樣使得在將新的模組整合到一個大程式之前開發和調試容易多了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.