摘要:一概念通常的程序的構架是指將一個程序分割為源代碼文件的集合以及將這些部分連接在一起的方法。的程序構架可表示為一個程序就是一個模塊的系統。它有一個頂層文件啟動后可運行程序以及多個模塊文件用來導入工具庫。導入是中程序結構的重點所在。
一、概念
通常的Python程序的構架是指:將一個程序分割為源代碼文件的集合以及將這些部分連接在一起的方法。
Python的程序構架可表示為:
一個Python程序就是一個模塊的系統。它有一個頂層文件(啟動后可運行程序)以及多個模塊文件(用來導入工具庫)。
注:標準庫模塊:Python中自帶的實用模塊,也稱為標準鏈接庫,這個集合體大約有200多個模塊,包含于平臺不相關的常見程序設計任務:操作系統接口、對象永久保存、文字匹配模式、網絡和Internet腳本、GUI建構等。注意:這些工具都不是Python語言的組成部分,但是,可以在任何安裝了標準Python的情況下,導入適當的模塊來使用。
概念:模塊是Python 中最高級別的組織單元,它將程序代碼和數據封裝起來以便重用。其實,每一個以擴展名 .py 結尾的Python文件都是一個模塊。
模塊的三個角色:
1)代碼重用;
2)系統 命名空間的劃分(模塊可理解為變量名的封裝,即模塊就是命名空間);
3)實現共享服務和數據。
程序和模塊:Python中,程序是作為一個主體的、頂層的文件來構造的,配合有零個或多個支持的文件,而后者這些文件都可以稱作模塊(頂層的文件也可以作為模塊使用,但一般情況不作為模塊)。
頂層文件:包含了程序的主要的控制流程:即需要運行來啟動應用的文件。
模塊文件:可看做是工具的倉庫(即裝滿了工具),這些工具是用來收集頂層文件(或其他可能的地方)使用的組件。
頂層文件與模塊文件:頂層文件使用了在模塊文件中定義的工具,為這些模塊也使用了其他模塊所定義的工具。
模塊的執行環境:模塊包含變量、函數、類以及其他的模塊(如果導入的話),而函數也有自己的本地變量。下圖描述了模塊內的情況以及與其他模塊的交互,即 模塊的執行環境:
可見:模塊可以被導入,但模塊也會導入和使用其他模塊,這些模塊可以用Python或其他語言(如,C語言)寫成。
三、import(導入)概念:一個文件可通過導入一個模塊(文件)讀取這個模塊的內容,即導入從本質上講,就是在一個文件中載入另一個文件,并且能夠讀取那個文件的內容。一個模塊內的內容通過這樣的屬性(object . attribute)能夠被外界使用。
導入是Python中程序結構的重點所在。
1) import X:導入模塊X,并在當前命名空間(namesapce)創建該模塊的引用??梢允褂茫篨.name引用定義在模塊X中的屬性。
2) from X import * :導入模塊X,并在當前命名空間,創建該模塊中所有公共對象(名字不以__開頭)的引用。即你能使用普通名字(直接是name)去引用模塊X中的屬性,但是X本身沒有定義,不能使用X.name。并且如果命名空間中原來有同名的name定義時,它將會被新的name取代。
3) from X import a, b, c:導入模塊X,并在當前命名空間創建該模塊給定對象的引用。
4) X = __import__("X"):類似(1)import X,區別在于:該方式顯示指定了X為當前命名空間中的變量。使用方法一致。
2、當 import a module時,Python都做了哪些事情?import a moudle時,首先,Python解釋器會檢查module registry(sys.moudles)部分,查看是否該模塊先前就已經導入,如果sys.modules 中已經存在(即已注冊),則使用當前存在的模塊對象即可。如果 sys.modules 中還不存在,則:
1)創建一個新的、空的module對象(本質上是一個字典);
2)在sys.modules字典中插入該模塊對象;
3)加載該模塊代碼所對應的對象(如果需要,可以先編譯好(編成位碼))。
然后在新的模塊命名空間、執行該模塊代碼對象(code object)。所有由該代碼指定的變量均可以通過該模塊對象引用。
注:上述步驟只有在模塊第一次執行時才會執行。在這之后,導入相同模塊時,會跳過這些步驟,而只提取內存中已加載的模塊對象。這是個有意設計的結果。因為導入(找文件--將其編譯成字節碼--運行代碼)是一個開銷很大的操作以至于每個程序運行不能夠重復多于一次。若想要Python 在同一次會話中再次運行文件(不停止和重新啟動會話),需要調用內置的reload(重載)函數(該函數返回值為一個Python模塊對象)。
1)程序的主目錄:即程序(頂層)文件所在的目錄(有時候不同于當前工作目錄(指啟動程序所在目錄))。
2)PYTHONPATH (環境變量)目錄
3)標準鏈接庫目錄
4)任何 .pth 文件的內容(如果存在的話):安裝目錄下找到該文件,以行的形式加入所需要的目錄即可。
以上四個組件組合起來就變成了 sys.path,其保存了模塊搜索路徑在機器上的實際配置,可以通過打印內置的sys.path 列表來查看這些路徑。導入時,Python會由左至右搜索列表中的每個目錄,知道找到對應的module為止。
其中搜索路徑的(1)和(3)是系統自動定義的,而(2)(4)可以用于拓展路徑,從而加入自己的源代碼目錄。
另外:也可以使用sys.path在Python程序運行時臨時修改模塊搜索路徑。
如:
import sys sys.path.append("C:mydir")
注:以上sys.path的設置方法只是在程序運行時臨時生效的,一旦程序結束,不會被保留下來。而前面介紹的四種路徑配置方式則會在操作系統中永久保存下來。
References:1、《Python 學習手冊》第3章、第18章以及第19章
2、Importing Python Modules from effot.org
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42788.html
摘要:底層淺析簡介是官方提供的接口,同時也是中的一個程序。這里一提,對于大部分機器學習算法,你都會看到模塊與模塊都提供了接口,它們的區別在于模塊接受格式的數據而模塊接受格式的數據。 pyspark底層淺析 pyspark簡介 pyspark是Spark官方提供的API接口,同時pyspark也是Spark中的一個程序。 在terminal中輸入pyspark指令,可以打開python的she...
摘要:二知識點最近在完成一個小作業,題目要求通過代碼實現,讓用戶輸入用戶名密碼,認證成功后顯示歡迎信息,輸錯三次后退出程序。 一、背景 人工智能這幾年一直都比較火,筆者一直想去學習一番;因為一直是從事PHP開發工作,對于Python接觸并不算多,總是在關鍵時候面臨著基礎不牢,地動山搖的尷尬,比如在遇到稍微深入些的問題時候就容易卡殼,于是準備從Python入門從頭學起; 筆者覺得應該有不少人同...
摘要:安卓滲透框架架構淺析架構組成和自定義模塊標簽空格分隔簡介是開發的一款針對系統的安全測試框架。感興趣的可以閱讀的相關源碼地址是一個安裝在測試安卓機上輕量級,并且只申請一個權限,是為了用來和進行連接的。 安卓滲透框架-Drozer架構淺析--架構組成和自定義模塊 標簽(空格分隔): Drozer Android Security 1. Drozer 簡介 Drozer是MWR Labs開...
閱讀 1940·2021-11-24 09:39
閱讀 3295·2021-09-22 14:58
閱讀 1169·2019-08-30 15:54
閱讀 3322·2019-08-29 11:33
閱讀 1795·2019-08-26 13:54
閱讀 1604·2019-08-26 13:35
閱讀 2472·2019-08-23 18:14
閱讀 771·2019-08-23 17:04