Python學習筆記 六 再談Python模組

2021-06-25 17:25:18 字數 1711 閱讀 4631

python程式包含多個模組檔案,乙個主體、頂層檔案實現主要控制流程、呼叫元件和工具,其他模組檔案則提供元件和工具,python自帶了許多實用的模組稱為標準鏈結庫。

模組是python中最高端別的程式組織單元,將**和資料封裝起來以便重用。每乙個檔案都是乙個模組,並且可以通過「匯入"來使用其他模組的變數(頂層定義的所有變數)。模組被匯入時就生成了乙個模組物件。從抽象的角度看,模組的作用有:

1)**重用-模組檔案的**可以永久儲存,可以被多個客戶端使用、任意的重新執行和過載

2)劃分系統命名空間-從根本上講,模組是封裝了變數名的軟體包,**和物件都封裝在模組內部,能夠避免變數名的衝突。不精確匯入檔案的話,另乙個模組檔案是看不到某模組的變數的。

3)共享服務和資料-模組有利於跨系統共享元件,對於乙個被多個函式和檔案使用的全域性物件,將其定義在乙個模組檔案中被多個客戶端匯入即可。

模組的三個重要語句和函式是:

import:使匯入者整體的獲得乙個模組,乙個模組只有在首次匯入後有效,其後若需要更新模組則使用reload。客戶端能夠獲得被匯入模組變數名的讀取權,被匯入模組則看不到客戶端的變數。程式第一次import某檔案的步驟為:

(1)搜尋-首先python必須先找到import所引用的模組檔案,import語句只能給出名稱,python使用標準模組搜尋路徑來找出對應的檔案,搜尋目錄包括:程式主目錄、標準鏈結庫目錄、pythonpath目錄(如果已設定)和任何已存在.pth檔案的內容。上述四個元件組合起來就成了sys.path,前兩者是自動定義的,後兩者由使用者自定義。python會在搜尋路徑中選擇第乙個符合檔名的檔案匯入,同一目錄相同檔名(不同字尾)則載入最先出現的(左邊的)。首先在主目錄下搜尋(頂層檔案所在目錄或者互動模式所在目錄),之後會從左到右搜尋pythonpath環境變數設定的目錄,接著是標準連線庫,最後是自定義.pth目錄檔案。import也支援重定義。

(2)編譯(可選)-找到模組檔案後,python會比較時間戳決定是否將該檔案編譯成位元組碼。如果發現了位元組碼檔案,則直接載入位元組碼。

(3)執行-執行模組的位元組碼,所有語句依次執行

from:允許匯入者從乙個模組中獲得特定的變數名,在客戶端中建立新變數,只有變數名被複製了過來。語句」from model import *「則是時客戶端獲得model模組中所有賦了值的變數的copy,即把model模組的命名空間融入客戶端模組,但不會匯入以下劃線」_「開頭的變數,若定義了」__all__「則會首先讀取其中的變數。無論複製多少各變數,from語句總是將整個模組匯入記憶體。from語句的潛在威脅是:如果客戶端中存在同名變數,則其值會被匯入的值替換掉;和reload配合使用時則可能匯入的時舊的變數值。如果使用from來取得模組中特定的變數名,必須記住的是只能讀取模組中已經賦值的變數名。

reload():reload()是函式,不中止程式執行的情況下,強制過載某一已經匯入的模組並重新執行,過載前模組一定要已經被匯入了。通過reload,使用者可以立即看到元件修改的結果,而無需停止整個程式。呼叫reload時,python會重讀該模組的原始檔、重新執行其頂層語句,客戶端程式中任何應用該模組物件的地方都會自動受到reload的影響。值得注意的是,之前通過from匯入的變數則不受影響,依然是過載前的舊物件。再者,reload(model)只會過載model檔案,而不會過載model檔案中import的其他模組檔案,所以可以把系統設計成自動過載子元件(即在每個模組中新增reload呼叫)或者編寫工具自動進行傳遞性過載。

py學習筆記

1.切片 list l l 2 4 l 1 10 2 同matlab l 複製 tuple 0,1,2,3,4 0 3 字串2.print 預設換行 print x 不換行print x,print y,orprint x,y 3.變數賦值 不需要型別宣告 gg 100.0 i,lov,u 233,...

Python學習筆記(六)

函式 呼叫python內建的函式,可以通過 help fun 進行查詢。舉例 abs x 求x絕對值 cmp x,y 比較兩個數大小,如果 xy,返回 1。int x 把其他資料型別轉換為整數,包括字串型別。str 把其他型別轉換成 str。編寫函式 def my abs x if x 0 retu...

Python學習筆記(六)

函式練習題 1 寫函式,檢查傳入字典的每乙個value的長度,如果大於2,那麼僅保留前兩個長度的內容,並將新內容返回給呼叫者。dic def dict func dic for key,value in dic.items if len value 2 value value 0 2 dic key...