摘要:找到模塊文件之后,將其編譯成字節碼,就是那個文件里面的關于字節碼,下面會介紹,請繼續閱讀。當然,如果根本就沒有找到同名的源文件,只有字節碼文件,那么就只能運行這個了。執行就是前面已經編譯的模塊字節碼文件,順理成章要執行了。
不管是用import還是用from mmmm import *的方式導入模塊,當程序運行之后,回頭在看那個存儲著mmmm.py文件的目錄中(關于mmmm.py文件可以看上一講),多了一個文件:
qw@qw-Latitude-E4300:~/Documents/ITArticles/BasicPython/codes$ ls mmm* mmmm.py mmmm.pyc
在這個目錄下面,除了原來的那個mmmm.py之外,又多了一個mmmm.pyc文件,這個文件不是我寫的,是哪里來的呢?
要破開此迷,需要用import的過程說起。
import的工作流程import mmmm,并不是僅僅將mmmm.py這個文件裝載到當前位置(文件內),其實是首先進行了一次運算。當mmmm.py被第一次導入的時候,python首先要對其進行編譯,生成擴展名為.pyc的同名文件,然后才執行mmmm模塊的代碼,創建相應的對象等。就如同把大象裝進冰箱,有三步要執行:
搜索。就是python要能夠找到import的模塊。怎么找到,后面講述。
編譯。找到模塊文件之后,將其編譯成字節碼,就是那個.pyc文件里面的(關于字節碼,下面會介紹,請繼續閱讀)。注意,不是什么時候都編譯的,只有第一次運行時候才編譯,如果mmmm.py文件改變了,相當于又一個新文件,也會從新編譯。其實就是.pyc文件中有一個時間戳,python會自動檢查這個時間戳,如果它比同名的.py文件時間戳舊,就會從新編譯。否則跳過。當然,如果根本就沒有找到同名的.py源文件,只有字節碼文件.pyc,那么就只能運行這個了。
運行。這就沒什么好說的了,生米已經淘干凈了,并且放到鍋里,開始加熱了,最后就只能熟飯了。執行就是前面已經編譯的模塊字節碼文件,順理成章要執行了。
搜索模塊一般情況下,python會自動的完成模塊搜索過程。但是,在某些情況下,或許會要求程序員來設定搜索路徑。當import一個模塊后,python會按照下面的順序來找那個將要導入的模塊文件
程序的主目錄。上一講中,在codes這個目錄中運行交互模式,這時候的主目錄就是codes,當在那個交互模式中運行import mmmm的時候,就首先在codes這個目錄中搜索相應的文件(找到.py之后編譯成為.pyc)。當然,后面在網頁編程中,看官會看到,所謂主目錄是可以通過頂層文件設置的目錄。
PYTHONPATH目錄。這是一個環境變量設置,如果沒有設置則濾去。如何進行環境變量設置,請看官google啦。
標準庫目錄。已經隨著Python的安裝進入到計算機中的那個。
任何.pth文件的內容。如果有這類文件,最后要在這類文件中搜索一下。這是一個簡單的方法,在.pth文件中,加入有效目錄,使之成為搜索路徑。下圖就是我的計算機上,存放.pth文件的位置以及里面放著的.pth文件
看官也可以自己編寫.pth文件,里面是有關搜索目錄,保存到這里。比如,打開目錄中的easy-install.pth文件,發現的內容:
搜索就是這么一個過程。這里建議看官了解即可,不一定非要進行什么設置,在很多情況下,python都是會自動完成的。特別是初學者,暫且不要輕舉妄動。
重載模塊以mmmm模塊為例(在這里要特別提醒看官:我這樣命名是相當不好滴,只不過是為了惡搞才這樣命名的)。
在一個shell里面,運行了python,并且做了如下操作:
>>> import mmmm >>> mmmm.web "https://qiwsir.github.io"
下面我再打開一個shell,編輯mmmm.py這個文件,進行適當修改:
保存之后,切換到原來的那個導入了模塊的交互模式:
>>> mmmm.web "https://qiwsir.github.io"
輸出的跟前面的一樣,沒有任何變化,這是為什么呢?
原來,當導入模塊的時候,只會在第一次導入時加載和執行模塊代碼,之后就不會重新加載或重新執行了,如果模塊代碼修改了,但是這里執行的還是修改之前的。
怎么實現代碼修改之后,執行新的呢?一種方式就是退出原來的交互模式,再重新進入,再import mmmm。呵呵,這種方法有點麻煩。Python提供了另外一個函數——reload函數,能夠實現模塊的重新加載(簡稱重載),重載后模塊代碼重新執行。如下繼續:
>>> reload(mmmm)>>> mmmm.web "https://qiwsir.github.io, I am writing a python book on line."
這下就顯示修改之后的內容了。
特別提醒注意:
reload是內置函數
reload(module),module是一個已經存在的模塊,不是變量名。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37409.html
摘要:學了大半年之后成功轉行做前端了。包含大量其他神經網絡庫中的包裝器和抽象,其中最值得注意的是,其中也包含一些機器學習的實用模塊。它是輕量級可擴展的神經網絡工具包,同時擁有友好的界面,可供機器學習的訓練和預測使用。 題記:大二的時候發現人生苦短,所以信了拍神,開始學Python。學了大半年之后成功轉行做前端了。來寫個教程幫助大家入門Python。 Python零基礎入門 零基礎入門就得從最...
摘要:補充一個資料,供有興趣的朋友閱讀浮點數算法爭議和限制說明以上除法規則,是針對,在中,將和等同起來了。比如下面的例子不啰嗦了,實驗一個注意了,引用了一個模塊之后,再做除法,就不管什么情況,都是得到浮點數的結果了。 除法啰嗦的,不僅是python。 整數除以整數 看官請在啟動idle之后,練習下面的運算: >>> 2/5 0 >>> 2.0/5 0.4 >>> 2/5.0 0.4 >...
摘要:認識模塊對于模塊,在前面的一些舉例中,已經涉及到了,比如曾經有過獲取隨機數模塊。這張圖列出了很少一部分存在這個目錄中的模塊文件。的標準庫是的一個組成部分,也是為的利器,可以讓編程事半功倍。這就是基本的模塊方法。 認識模塊 對于模塊,在前面的一些舉例中,已經涉及到了,比如曾經有過:import random (獲取隨機數模塊)。為了能夠對模塊有一個清晰的了解,首先要看看什么模塊,這里選...
摘要:的非阻塞單線程的特點在這個模塊中體現。還有一個模塊引入,是用完成的這兩句就顯示了所謂命令行解析模塊的用途了。表示可以接收來自的請求了。以上把一個簡單的剖析。 As he walked by the sea of Galilee, he saw two brothers, Simon, who is called Peter, and Andrew his brother, cas...
閱讀 3371·2023-04-25 14:07
閱讀 3438·2021-09-28 09:35
閱讀 2079·2019-08-30 15:55
閱讀 1396·2019-08-30 13:48
閱讀 2496·2019-08-30 13:16
閱讀 3196·2019-08-30 12:54
閱讀 3232·2019-08-30 11:19
閱讀 1869·2019-08-29 17:17