python項目---資料視覺效果(02)

來源:互聯網
上載者:User

標籤:儲存   刪除   轉換   運行程式   意思   func   環境   內容   速度   

         今天編寫程式時,發現了一個有趣的現象。當執行import語句時,運行以後,將會指令碼目錄下產生一個__pycache__檔案。於是做了如下總結解釋:

一. python基本運行機制

     Python程式運行時不需要編譯成二進位代碼,而直接從源碼運行程式,簡單來說是,Python解譯器將源碼轉換為位元組碼,然後再由解譯器來執行這些位元組碼。

     解譯器的具體工作:

     1 完成模組的載入和連結;

     2 將原始碼編譯為PyCodeObject對象(即位元組碼),寫入記憶體中,供CPU讀取;

     3 從記憶體中讀取並執行,結束後將PyCodeObject寫回硬碟當中,也就是複製到.pyc或.pyo檔案中,以儲存目前的目錄下所有指令碼的位元組碼檔案;

     * 之後若再次執行該指令碼,它先檢查【本地是否有上述位元組碼檔案】和【該位元組碼檔案的修改時間是否與其指令碼一致】。是就直接執行,否則重複上述步驟。

二. 為何會出現該檔案

     python解譯器會將 *.py 指令檔進行編譯,並將編譯結果儲存到__pycache__目錄中。

    下次再執行工程時,若解譯器發現這個 *.py 指令碼沒有修改過,就會跳過編譯這一步,直接運行以前產生的儲存在 __pycache__檔案夾裡的 *.pyc 檔案。

     這樣工程較大時就可以大大縮短項目運行前的準備時間;如果你只需執行一個小工程,沒關係 忽略這個檔案夾就行。

三. 如何使該檔案不出現

     1. 單次關閉: 運行指令碼時添加 -B 參數即可

     2. 永久關閉: 設定環境變數 PYTHONDONTWRITEBYTECODE=1 即可

四. 解釋下該檔案的內容

     該檔案裡有大小隨時變化的類似格式random_walk.cpython-37.pyc檔案,點號中的第一位代表被inport進來的模板。cpython-37cpython代表的是c語言實現的Python解譯器,-37代表的是版本為3.7版。 

五. 模組調用

Python中匯入模組時,實際上會把被匯入的模組執行一遍,如下: 
先看被調用的模組test.py

def haha():    print("哈哈")haha()

再看主程式main.py

import testprint("一條魚")

執行結果是:

哈哈一條魚

那怎麼才能只是單純調用而不執行被調用模組的代碼呢?要想被調用模組代碼不被執行,前提得知道變數__name__是什麼意思,簡單來說就是,如果不涉及模組匯入的話,__name__的值就是” __main__“,如果當此模組被匯入引用的話,那麼這個模組內的__name__值就是檔案的名字(不帶.py),如下test_1.py

def haha():    print("哈哈")haha()print(__name__)

test_1.py執行結果為:

哈哈__main__

如果test_1被匯入引用的話,如test_2

import test_1print("一條魚")

test_2x運行結果為:

哈哈test_1一條魚

上邊所說要是弄懂的話,那我們在被調用的模組中,可執行檔代碼前加上這麼一句判斷,if __name__ == ‘__main__‘:,被調用的模組的代碼就不會被執行了!或者再啟動的時候添加選項參數。這個檔案時可以刪除的,不過刪除意義不大。反而存在的話,載入會更快。

 

 

 

 

note: pyo和.pyc檔案的執行速度不會比.py檔案快,快的地方在於模組載入的速度

 

考文獻:

79023987

https://www.cnblogs.com/Ralph-Wang/archive/2013/11/23/3439080.html

https://jingyan.baidu.com/article/c14654134a7bdd0bfcfc4cea.html

python項目---資料視覺效果(02)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.