成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python 程序構(gòu)架淺析

hss01248 / 2686人閱讀

摘要:一概念通常的程序的構(gòu)架是指將一個(gè)程序分割為源代碼文件的集合以及將這些部分連接在一起的方法。的程序構(gòu)架可表示為一個(gè)程序就是一個(gè)模塊的系統(tǒng)。它有一個(gè)頂層文件啟動(dòng)后可運(yùn)行程序以及多個(gè)模塊文件用來(lái)導(dǎo)入工具庫(kù)。導(dǎo)入是中程序結(jié)構(gòu)的重點(diǎn)所在。

一、概念

通常的Python程序的構(gòu)架是指:將一個(gè)程序分割為源代碼文件的集合以及將這些部分連接在一起的方法。

Python的程序構(gòu)架可表示為:

一個(gè)Python程序就是一個(gè)模塊的系統(tǒng)。它有一個(gè)頂層文件(啟動(dòng)后可運(yùn)行程序)以及多個(gè)模塊文件(用來(lái)導(dǎo)入工具庫(kù))。
:標(biāo)準(zhǔn)庫(kù)模塊:Python中自帶的實(shí)用模塊,也稱為標(biāo)準(zhǔn)鏈接庫(kù),這個(gè)集合體大約有200多個(gè)模塊,包含于平臺(tái)不相關(guān)的常見(jiàn)程序設(shè)計(jì)任務(wù):操作系統(tǒng)接口、對(duì)象永久保存、文字匹配模式、網(wǎng)絡(luò)和Internet腳本、GUI建構(gòu)等。注意:這些工具都不是Python語(yǔ)言的組成部分,但是,可以在任何安裝了標(biāo)準(zhǔn)Python的情況下,導(dǎo)入適當(dāng)?shù)哪K來(lái)使用。

二、模塊

概念:模塊是Python 中最高級(jí)別的組織單元,它將程序代碼和數(shù)據(jù)封裝起來(lái)以便重用。其實(shí),每一個(gè)以擴(kuò)展名 .py 結(jié)尾的Python文件都是一個(gè)模塊。
模塊的三個(gè)角色:

1)代碼重用;

2)系統(tǒng) 命名空間的劃分(模塊可理解為變量名的封裝,即模塊就是命名空間);

3)實(shí)現(xiàn)共享服務(wù)和數(shù)據(jù)。

程序和模塊:Python中,程序是作為一個(gè)主體的、頂層的文件來(lái)構(gòu)造的,配合有零個(gè)或多個(gè)支持的文件,而后者這些文件都可以稱作模塊(頂層的文件也可以作為模塊使用,但一般情況不作為模塊)。
頂層文件:包含了程序的主要的控制流程:即需要運(yùn)行來(lái)啟動(dòng)應(yīng)用的文件。
模塊文件:可看做是工具的倉(cāng)庫(kù)(即裝滿了工具),這些工具是用來(lái)收集頂層文件(或其他可能的地方)使用的組件。
頂層文件與模塊文件:頂層文件使用了在模塊文件中定義的工具,為這些模塊也使用了其他模塊所定義的工具。
模塊的執(zhí)行環(huán)境:模塊包含變量、函數(shù)、類以及其他的模塊(如果導(dǎo)入的話),而函數(shù)也有自己的本地變量。下圖描述了模塊內(nèi)的情況以及與其他模塊的交互,即 模塊的執(zhí)行環(huán)境:

可見(jiàn):模塊可以被導(dǎo)入,但模塊也會(huì)導(dǎo)入和使用其他模塊,這些模塊可以用Python或其他語(yǔ)言(如,C語(yǔ)言)寫成。

三、import(導(dǎo)入)

概念:一個(gè)文件可通過(guò)導(dǎo)入一個(gè)模塊(文件)讀取這個(gè)模塊的內(nèi)容,即導(dǎo)入從本質(zhì)上講,就是在一個(gè)文件中載入另一個(gè)文件,并且能夠讀取那個(gè)文件的內(nèi)容。一個(gè)模塊內(nèi)的內(nèi)容通過(guò)這樣的屬性(object . attribute)能夠被外界使用。
導(dǎo)入是Python中程序結(jié)構(gòu)的重點(diǎn)所在。

1、import a module 四種方式

1) import X:導(dǎo)入模塊X,并在當(dāng)前命名空間(namesapce)創(chuàng)建該模塊的引用。可以使用:X.name引用定義在模塊X中的屬性。

2) from X import * :導(dǎo)入模塊X,并在當(dāng)前命名空間,創(chuàng)建該模塊中所有公共對(duì)象(名字不以__開頭)的引用。即你能使用普通名字(直接是name)去引用模塊X中的屬性,但是X本身沒(méi)有定義,不能使用X.name。并且如果命名空間中原來(lái)有同名的name定義時(shí),它將會(huì)被新的name取代。

3) from X import a, b, c:導(dǎo)入模塊X,并在當(dāng)前命名空間創(chuàng)建該模塊給定對(duì)象的引用。

4) X = __import__("X"):類似(1)import X,區(qū)別在于:該方式顯示指定了X為當(dāng)前命名空間中的變量。使用方法一致。

2、當(dāng) import a module時(shí),Python都做了哪些事情?

import a moudle時(shí),首先,Python解釋器會(huì)檢查module registry(sys.moudles)部分,查看是否該模塊先前就已經(jīng)導(dǎo)入,如果sys.modules 中已經(jīng)存在(即已注冊(cè)),則使用當(dāng)前存在的模塊對(duì)象即可。如果 sys.modules 中還不存在,則:

1)創(chuàng)建一個(gè)新的、空的module對(duì)象(本質(zhì)上是一個(gè)字典);

2)在sys.modules字典中插入該模塊對(duì)象;

3)加載該模塊代碼所對(duì)應(yīng)的對(duì)象(如果需要,可以先編譯好(編成位碼))。

然后在新的模塊命名空間、執(zhí)行該模塊代碼對(duì)象(code object)。所有由該代碼指定的變量均可以通過(guò)該模塊對(duì)象引用。
:上述步驟只有在模塊第一次執(zhí)行時(shí)才會(huì)執(zhí)行。在這之后,導(dǎo)入相同模塊時(shí),會(huì)跳過(guò)這些步驟,而只提取內(nèi)存中已加載的模塊對(duì)象。這是個(gè)有意設(shè)計(jì)的結(jié)果。因?yàn)閷?dǎo)入(找文件--將其編譯成字節(jié)碼--運(yùn)行代碼)是一個(gè)開銷很大的操作以至于每個(gè)程序運(yùn)行不能夠重復(fù)多于一次。若想要Python 在同一次會(huì)話中再次運(yùn)行文件(不停止和重新啟動(dòng)會(huì)話),需要調(diào)用內(nèi)置的reload(重載)函數(shù)(該函數(shù)返回值為一個(gè)Python模塊對(duì)象)。

3、import 搜索路徑順序

1)程序的主目錄:即程序(頂層)文件所在的目錄(有時(shí)候不同于當(dāng)前工作目錄(指啟動(dòng)程序所在目錄))。

2)PYTHONPATH (環(huán)境變量)目錄

3)標(biāo)準(zhǔn)鏈接庫(kù)目錄

4)任何 .pth 文件的內(nèi)容(如果存在的話):安裝目錄下找到該文件,以行的形式加入所需要的目錄即可。

以上四個(gè)組件組合起來(lái)就變成了 sys.path,其保存了模塊搜索路徑在機(jī)器上的實(shí)際配置,可以通過(guò)打印內(nèi)置的sys.path 列表來(lái)查看這些路徑。導(dǎo)入時(shí),Python會(huì)由左至右搜索列表中的每個(gè)目錄,知道找到對(duì)應(yīng)的module為止。
其中搜索路徑的(1)和(3)是系統(tǒng)自動(dòng)定義的,而(2)(4)可以用于拓展路徑,從而加入自己的源代碼目錄。
另外:也可以使用sys.path在Python程序運(yùn)行時(shí)臨時(shí)修改模塊搜索路徑。
如:

import sys  
sys.path.append("C:mydir") 

:以上sys.path的設(shè)置方法只是在程序運(yùn)行時(shí)臨時(shí)生效的,一旦程序結(jié)束,不會(huì)被保留下來(lái)。而前面介紹的四種路徑配置方式則會(huì)在操作系統(tǒng)中永久保存下來(lái)。

References:

1、《Python 學(xué)習(xí)手冊(cè)》第3章、第18章以及第19章
2、Importing Python Modules from effot.org

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42788.html

相關(guān)文章

  • pyspark底層淺析

    摘要:底層淺析簡(jiǎn)介是官方提供的接口,同時(shí)也是中的一個(gè)程序。這里一提,對(duì)于大部分機(jī)器學(xué)習(xí)算法,你都會(huì)看到模塊與模塊都提供了接口,它們的區(qū)別在于模塊接受格式的數(shù)據(jù)而模塊接受格式的數(shù)據(jù)。 pyspark底層淺析 pyspark簡(jiǎn)介 pyspark是Spark官方提供的API接口,同時(shí)pyspark也是Spark中的一個(gè)程序。 在terminal中輸入pyspark指令,可以打開python的she...

    FrozenMap 評(píng)論0 收藏0
  • 通過(guò)PHP與Python代碼對(duì)比淺析語(yǔ)法差異

    摘要:二知識(shí)點(diǎn)最近在完成一個(gè)小作業(yè),題目要求通過(guò)代碼實(shí)現(xiàn),讓用戶輸入用戶名密碼,認(rèn)證成功后顯示歡迎信息,輸錯(cuò)三次后退出程序。 一、背景 人工智能這幾年一直都比較火,筆者一直想去學(xué)習(xí)一番;因?yàn)橐恢笔菑氖翽HP開發(fā)工作,對(duì)于Python接觸并不算多,總是在關(guān)鍵時(shí)候面臨著基礎(chǔ)不牢,地動(dòng)山搖的尷尬,比如在遇到稍微深入些的問(wèn)題時(shí)候就容易卡殼,于是準(zhǔn)備從Python入門從頭學(xué)起; 筆者覺(jué)得應(yīng)該有不少人同...

    edagarli 評(píng)論0 收藏0
  • 安卓滲透框架-Drozer架構(gòu)淺析--架構(gòu)組成和自定義模塊

    摘要:安卓滲透框架架構(gòu)淺析架構(gòu)組成和自定義模塊標(biāo)簽空格分隔簡(jiǎn)介是開發(fā)的一款針對(duì)系統(tǒng)的安全測(cè)試框架。感興趣的可以閱讀的相關(guān)源碼地址是一個(gè)安裝在測(cè)試安卓機(jī)上輕量級(jí),并且只申請(qǐng)一個(gè)權(quán)限,是為了用來(lái)和進(jìn)行連接的。 安卓滲透框架-Drozer架構(gòu)淺析--架構(gòu)組成和自定義模塊 標(biāo)簽(空格分隔): Drozer Android Security 1. Drozer 簡(jiǎn)介 Drozer是MWR Labs開...

    yanbingyun1990 評(píng)論0 收藏0
  • 淺析WSGI

    摘要:也就是說(shuō),是連接服務(wù)器和應(yīng)用服務(wù)器的橋梁。目前實(shí)現(xiàn)的中,有兩個(gè)角色分別是和。是一個(gè)可調(diào)用對(duì)象,它包含了一個(gè)表示響應(yīng)狀態(tài)的字符串和一個(gè)響應(yīng)的列表以及一個(gè)用于出錯(cuò)返回的信息,具體參數(shù)包含及詳情請(qǐng)點(diǎn)這里。可以被連接在一起,由此產(chǎn)生的鏈通常被稱為。 首先,什么是WSGI? WSGI, 全稱為 Web Server Gateway Interface。 它不是什么框架,它是一個(gè)規(guī)范,但是作為一個(gè)...

    王偉廷 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<