python中的__name__=='__main__'如何簡單理解
轉自:http://www.cnblogs.com/GGGGGGZX/p/9206806.html
1. 摘要:
通俗的理解_name_ == '_main_':假如你叫小明.py,在朋友眼中,你是小明(_name_ == '小明');在你自己眼中,你是你自己(_name_ == '_main_')。
if _name_ == '_main_'的意思是:當.py檔案被直接執行時,if _name_ == '_main_'之下的程式碼塊將被執行;當.py檔案以模組形式被匯入時,if _name_ == '_main_'之下的程式碼塊不被執行。
2. 程式入口
對於很多程式語言來說,程式都必須要有一個入口,比如C,C++,以及完全物件導向的程式語言Java,C#等。如果你接觸過這些語言,對於程式入口這個概念應該很好理解,C,C++都需要有一個main函式作為程式的入口,也就是程式的執行會從main函式開始。同樣,Java,C#必須要有一個包含Main方法的主類,作為程式入口。
而Python則不同,它屬於指令碼語言,不像編譯型語言那樣先將程式編譯成二進位制再執行,而是動態的逐行解釋執行。也就是從指令碼第一行開始執行,沒有統一的入口。
一個Python原始碼檔案(.py)除了可以被直接執行外,還可以作為模組(也就是庫),被其他.py檔案匯入。不管是直接執行還是被匯入,.py檔案的最頂層程式碼都會被執行(Python用縮排來區分程式碼層次),而當一個.py檔案作為模組被匯入時,我們可能不希望一部分程式碼被執行。
2.1 一個.py檔案被其他.py檔案引用
假設我們有一個const.py檔案,內容如下:
現在,我們寫一個用於計算圓面積的area.py檔案,area.py檔案需要用到const.py檔案中的PI變數。從const.py中,我們把PI變數匯入area.py:
執行結果:
2.2 修改const.py,新增if name == "main"
我們看到const.py中的main函式也被執行了,實際上我們不希望它被執行,因為const.py提供的main函式只是為了測試常量定義。這時if _name_ == '_main_'派上了用場,我們把const.py改一下,新增if _name_ == "_main_":
執行const.py,輸出如下:
執行area.py,輸出如下:
如上,我們可以看到if _name_ == '_main_'相當於Python模擬的程式入口,Python本身並沒有這麼規定,這只是一種編碼習慣。由於模組之間相互引用,不同模組可能有這樣的定義,而程式入口只有一個。到底哪個程式入口被選中,這取決於__name__的值。
相關文章
- Python中“if __name__=='__main__PythonAI
- python中if __name__ == '__main__': 的解析PythonAI
- Python中if __name__ == '__main__'作用解析PythonAI
- if __name__==”__main__”:AI
- if __name__ == ‘__main__‘AI
- if __name__=="__main__":AI
- 【python】if __name__ == '__main__' 淺析PythonAI
- __name__ == "__main__"的作用是什麼?AI
- __name__ == “__main__”的作用是什麼?AI
- ~~物件導向進階(二)——__name__=="__main__"~~物件AI
- __name__ == '__main__' 到底是什麼意思AI
- 寫了2年python,知道 if __name__ == '__main__' 什麼意思嗎?PythonAI
- Python面試|一文讓你讀懂if __name__=='__main__'的含義Python面試AI
- 如何簡單的理解TDD與DDT
- 簡單地理解 Python 的裝飾器Python
- 簡單理解Vue中的nextTickVue
- Oracle中coalesce函式的簡單理解Oracle函式
- 【譯】簡單理解 JavaScript 中的設計模式JavaScript設計模式
- 簡單理解Java中的4種迴圈Java
- 簡單快速理解js中的this、call和applyJSAPP
- 簡單 12 步理解 Python 裝飾器Python
- python中的itertools模組簡單使用Python
- Node中EventEmitter理解與簡單實現MIT
- 如何理解Python中的繼承?python入門Python繼承
- Python中的selenium的簡單用法Python
- PHP socket 的簡單理解PHP
- MongoDB索引的簡單理解MongoDB索引
- 對CSRF的簡單理解
- ThreadLocal的簡單理解thread
- 快速排序的簡單理解排序
- Java的簡單理解(2)Java
- 【Python】__name__ 是什麼?Python
- 簡單理解promisePromise
- Restful簡單理解REST
- EJB簡單理解
- BFC簡單理解
- 簡單理解OpenTracing技術中的span概念
- RAC中對DB引數檔案的簡單理解