偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

對Python應(yīng)用程序進(jìn)行剖析解讀

開發(fā) 后端
Python應(yīng)用程序的一個(gè)特別之處是賦值總是進(jìn)入最內(nèi)層作用域,關(guān)于刪除也是這樣,實(shí)際上,所有引入新名字的操作都使用局部作用域。

Python應(yīng)用程序是一個(gè)真正面向?qū)ο蟮恼Z言,它只增加了很少的新語法就實(shí)現(xiàn)了類,它的類機(jī)制是C++ 和Modula-3的類機(jī)制的混合,Python的類并不嚴(yán)格限制用戶對定義的修改,它依賴于用戶自覺不去修改定義。

類繼承機(jī)制允許多個(gè)基類的繼承,導(dǎo)出類可以重載基類的任何方法,方法可以調(diào)用基類的同名方法。對象可以包含任意多的私有數(shù)據(jù)。用C++術(shù)語說,所有類成員(包括數(shù)據(jù)成員)是公用的,所有成員函數(shù)是虛擬(virtual)的。沒有特別的構(gòu)建函數(shù)或銷毀函數(shù)(destructor)。

如同在Modula-3中一樣,從對象的方法中要引用對象成員沒有簡捷的辦法:方法函數(shù)的必須以對象作為第一個(gè)參數(shù),而在調(diào)用時(shí)則自動(dòng)提供。象在Smalltalk中一樣,類本身也是對象,實(shí)際上這里對象的含義比較寬:在Python 中所有的數(shù)據(jù)類型都是對象。

象在C++或Modula-3中一樣,內(nèi)置類型不能作為基類由用戶進(jìn)行擴(kuò)展。并且,象C++但不象Modula-3,多數(shù)有特殊語法的內(nèi)置函數(shù)(如算術(shù)算符、下標(biāo)等)可以作為類成員重定義。

Python應(yīng)用程序的對象概念比較廣泛,對象不一定非得是類的實(shí)例,因?yàn)槿缤珻++和Modula-3而不同于Smalltalk,Python的數(shù)據(jù)類型不都是類。比如基本內(nèi)置類型整數(shù)、列表等不是類,甚至較古怪的類型如文件也不是類。然而,Python所有的數(shù)據(jù)類型都或多或少地帶有一些類似對象的語法。

對象是有單獨(dú)身份的,同一對象可以有多個(gè)名字與其聯(lián)系,這在其他語言中叫做別名。這樣做的好處乍一看并不明顯,而且對于非可變類型(數(shù)字、字符串、序表(tuple))等沒有什么差別。

但是別名句法對于包含可變對象如列表、字典及涉及程序外部物件如文件、窗口的程序有影響,這可以有利于程序編制。在引入類之前,我們必須講一講Python的作用域規(guī)則。類定義很好地利用了名字空間,需要了解Python如何處理作用域和名字空間才能充分理解類的使用。另外,作用域規(guī)則也是一個(gè)高級Python程序員必須掌握的知識(shí)。

因?yàn)閯e名有些類似指針:比如,傳遞一個(gè)對象變得容易,因?yàn)檫@只是傳遞了一個(gè)指針;如果一個(gè)函數(shù)修改了作為參數(shù)傳遞來的對象,修改結(jié)果可以傳遞回調(diào)用處。這樣就不必象Pascal那樣使用兩種參數(shù)傳遞機(jī)制。

名字空間是從名字到對象的映射。多數(shù)名字空間目前是用Python字典類型實(shí)現(xiàn)的,不過這一點(diǎn)一般是注意不到的,而且將來可能會(huì)改變。下面是名字空間的一些實(shí)例:Python中內(nèi)置的名字(如abs()等函數(shù),以及內(nèi)置的例外名);模塊中的全局名;函數(shù)調(diào)用中的局部變量名。

在某種意義上一個(gè)對象的所有屬性也構(gòu)成了一個(gè)名字空間。關(guān)于名字空間最重要的事要知道不同名字空間的名字沒有任何聯(lián)系;例如,兩個(gè)不同模塊可能都定義了一個(gè)叫“maximize ”的函數(shù)而不會(huì)引起混亂,因?yàn)槟K的用戶必須在函數(shù)名之前加上模塊名作為修飾。

另外,在Python應(yīng)用程序中可以把任何一個(gè)在句點(diǎn)之后的名字稱為屬性,例如,在表達(dá)式z.real中,real是一個(gè)對象z的屬性。嚴(yán)格地說,對模塊中的名字的引用是屬性引用:在表達(dá)式modname.funcname 中,modname是一個(gè)模塊對象,funcname是它的一個(gè)屬性。

在這種情況下在模塊屬性與模塊定義的全局名字之間存在一個(gè)直接的映射:它們使用相同的名字空間!屬性可以是只讀的也可以是可寫的。在屬性可寫的時(shí)候,可以對屬性賦值。

名字空間與不同時(shí)刻創(chuàng)建,有不同的生存周期。包含Python內(nèi)置名字的名字空間當(dāng)Python 解釋程序開始時(shí)被創(chuàng)建,而且不會(huì)被刪除。模塊的全局名字空間當(dāng)模塊定義被讀入時(shí)創(chuàng)建,一般情況下模塊名字空間也一直存在到解釋程序退出。由解釋程序的最頂層調(diào)用執(zhí)行的語句。

不論是從一個(gè)腳本文件讀入的還是交互輸入的,都屬于一個(gè)叫做__main__的模塊,所以也存在于自己的全局名字空間之中。(內(nèi)置名字實(shí)際上也存在于一個(gè)模塊中,這個(gè)模塊叫做__builtin__ )。

函數(shù)的局部名字空間當(dāng)函數(shù)被調(diào)用時(shí)創(chuàng)建,當(dāng)函數(shù)返回或者產(chǎn)生了一個(gè)不能在函數(shù)內(nèi)部處理的例外時(shí)被刪除。(實(shí)際上,說是忘記了這個(gè)名字空間更符合實(shí)際發(fā)生的情況。)當(dāng)然,遞歸調(diào)用在每次遞歸中有自己的局部名字空間。

一個(gè)作用域是Python應(yīng)用程序中的一個(gè)文本區(qū)域,其中某個(gè)名字空間可以直接訪問?!爸苯釉L問” 這里指的是使用不加修飾的名字就直接找到名字空間中的對象,雖然作用域是靜態(tài)定義的,在使用時(shí)作用域是動(dòng)態(tài)的。

在任何運(yùn)行時(shí)刻,總是恰好有三個(gè)作用域在使用中(即恰好有三個(gè)名字空間是直接可訪問的):最內(nèi)層的作用域,最先被搜索,包含局部名字;中層的作用域,其次被搜索,包含當(dāng)前模塊的全局名字;最外層的作用域最后被搜索,包含內(nèi)置名字。

【編輯推薦】

  1. 有關(guān)Python系統(tǒng)文件進(jìn)行介紹指導(dǎo)
  2. 如何正確的使用Python函數(shù)
  3. Python 構(gòu)建工具進(jìn)行詳細(xì)介紹分析
  4. PythonAndroid淺析Python優(yōu)勢所在
  5. 如何使用Python模塊解析配置文件?
責(zé)任編輯:chenqingxiang 來源: 博客園
相關(guān)推薦

2010-02-26 09:55:22

Python應(yīng)用程序

2010-02-22 14:54:47

Python應(yīng)用程序

2010-02-01 14:05:03

2010-02-07 10:21:27

Android應(yīng)用程序

2015-10-21 13:57:09

WatchKit 要點(diǎn)開發(fā)

2010-01-26 17:16:33

C++應(yīng)用程序

2010-01-25 17:14:44

Android應(yīng)用程序

2010-02-04 09:41:03

Android應(yīng)用程序

2011-06-13 09:38:00

BingiPhoneApp Store

2011-08-22 09:59:16

2010-03-04 10:11:17

Android手機(jī)系統(tǒng)

2009-09-03 17:36:13

C#創(chuàng)建Web應(yīng)用程序

2010-03-04 16:21:15

Android Mar

2010-12-06 15:23:43

2010-01-25 10:57:57

Android系統(tǒng)應(yīng)用

2020-05-28 09:51:11

Web安全WAF漏洞

2010-12-15 15:19:24

2022-08-31 11:46:46

物聯(lián)網(wǎng)

2021-08-30 14:23:05

BlazorHTTP請求

2024-01-15 06:05:05

DockerGol ang應(yīng)用程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)