python模块:运行机制与编写方法
文章目錄
- python模塊的導入機制:
- python模塊編寫方法:
python模塊的導入機制:
1.每一個文件都是一個模塊,模塊是最高級別的程序組織單元,它將程序代碼和數據封裝起來以便重用。在一個模塊文件的頂層定義的所有變量名都成了被導入的模塊對象的屬性 。
2.一個程序包含多個文件(模塊),程序作為一個頂層文件來構造,這個頂層文件使用在模塊文件中定義的工具,這些模塊也可能使用其他模塊定義的工具。我們導入一個模塊,就可以獲取他的屬性并使用它的工具(可被調用的函數或者是簡單的數據數值)。可以在不同程序中再次使用某一模塊。
3.python自帶了很多模塊,稱為標準鏈接庫。
4.import工作方式:
導入并不是把一個文件文本插入另一個文件,導入是運行時的運算,程序第一次導入指定文件時會執行:1.找模塊文件,2.編譯成位碼,3.執行模塊的代碼來創建其所定義的對象。模塊第一次被導入時才會進行,之后如果導入相同模塊,會跳過這幾個步驟,只提取內存中已加載的模塊對象。
python已經導入的模塊保存在一個內置的sys.moudles字典中,在一次導入操作的開始檢查該表,如果模塊不存在,將會啟動那三個步驟。
5.python字節碼編譯:
程序執行時,python內部會將源代碼(文件里的語句)編譯成字節碼(平臺無關)的形式。python將把程序中的字節碼保存為一個以.pyc為擴展名的文件。這是一種啟動速度的優化,如果沒有修改過源代碼的話,下一次運行程序,python將會加載.pyc文件并跳過編譯步驟。如果源文件的保存時間在字節碼保存時間之后,那么再次運行程序時,字節碼會重新被創建。
字節碼不是機器的二進制代碼,它是基于python的一種表現形式。
6.python虛擬機(PVM)
程序編譯成字節碼之后,字節碼將會發送到python虛擬機上來執行。PVM是迭代運行字節碼指令的一個大循環,它是python運行的引擎,是python系統的一部分。
PVM循環仍然需要解釋字節碼,和其他解釋器不同,python有它內部的編譯步驟。字節碼指令相比cup指令需要更多工作。
7.三個步驟具體的細節:
搜索:python查找import語句所引用的模塊文件
python模塊搜索的路徑:程序的主目錄,pathonpath目錄,標準庫目錄,.pth文件的內容。這四個組合起來就成了sys.path目錄名稱字符串列表。python會從左到右搜索這個列表中的目錄。
主目錄:當你運行一個程序,這個包含程序頂層腳本文件的目錄就是主目錄,這個目錄下的其他模塊(文件)將覆蓋其他目錄下的具有同樣名稱的模塊。這個主目錄總是優先被搜索,因此需要小心隱藏標準庫模塊。如果程序都位于單一的目錄,那么所有導入都將會自動工作,不需要配置路徑。
pathonpath目錄:pythonpath環境變量設置中羅列出的所有目錄。
編譯:找到符合import語句的源代碼文件后,編譯成字節碼。有時候,如果python在搜素路徑上只發現了字節碼文件,那么就直接會加載字節碼(從而避免了泄露源代碼)。
程序頂層文件的字節碼是在內部使用之后就被丟棄,而被導入文件的字節碼則保存在文件中,從而提高之后導入的速度。因此我們可以看見被導入文件的.pyc字節碼文件,但往往看不到程序頂層文件的.pyc字節碼文件。
8.模塊讓程序將其邏輯分割成一些獨立完備的軟件組件。每個模塊的程序代碼相互隔離,因此模塊最小化了程序內不同部分之間的變量名沖突。
python模塊編寫方法:
1.使用模塊:客戶端可以通過import和form語句使用模塊文件。
import語句:import會讀取整個模塊,需要通過模塊名稱得到模塊屬性。
form語句:獲取模塊特定的變量名,from可以把變量名復制到當前作用域,我們可以直接在腳本中使用復制后的變量名,而不需要通過模塊。
from*語句:會取得模塊頂層所有賦了值的變量名的拷貝。把一個模塊的命名空間融入另一個模塊中。
2.導入只會發生一次:在交互模式或者程序運行期間,之后的導入沒有什么效果。如果第一次導入的時候,對模塊中的變量進行初始化,第二次導入后,并不會重新執行此模塊的代碼,只是從python內部模塊表中取出已創建的模塊對象。(一般是import兩次,但是第二次其實是沒用的)
3.import和from屬于賦值語句:
import語句:將整個模塊對象賦值給一個變量名
from語句:將一個或多個變量名賦值給另一個模塊中同名的對象。
from復制的變量名會變成共享對象的引用,修改已取出的不可變對象,不會影響模塊中的那個不可變對象的值,但是修改可變對象,會影響模塊內的那個可變對象。
以from復制而來的變量名和其源文件沒聯系(不可變對象),如果想要修改另一個文件的全局變量名,必須使用import
from只加載模塊文件的一部分是不可能的,from也是會把整個模塊導入到內存中,不管需要復制出多少變量名。
只能用import的場合:使用兩個不同模塊內定義的相同變量名的變量。
總結
以上是生活随笔為你收集整理的python模块:运行机制与编写方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多媒体分析与理解_如何设计一个出色的数字
- 下一篇: 工程用计算机是什么样子的,【2人回答】学