国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

2015/8/28Python基礎(chǔ)(2):對象

2019-11-14 17:02:27
字體:
供稿:網(wǎng)友

Python用對象模型來存儲數(shù)據(jù)。構(gòu)造任何類型的值都是一個對象。
Python對象都有是三個特性:身份,類型和值

身份是每個對象的唯一身份標(biāo)識。任何對象都可以用內(nèi)建函數(shù)id()來得到身份。如:

>>> s = 1>>> id(s)38249176

身份可以認(rèn)為是該對象的地址。

類型是數(shù)據(jù)以何種方式保存,可以進(jìn)行怎樣的操作,遵循怎樣的規(guī)則。可以使用內(nèi)建函數(shù)type()來查看。

值就是對象的數(shù)據(jù)項。

上面三個特性在對象創(chuàng)建時被賦值,除值以外其他特性都是只讀。對象的類型是可以改變的,但對于初學(xué)者不建議這么做

Python是用點標(biāo)記法來訪問屬性的,屬性包括對象的名字等等,最常用的屬性是函數(shù)和方法,不過有一些也有數(shù)據(jù)屬性。含有數(shù)據(jù)屬性的對象包括(不限于):類、類實例、模塊、復(fù)數(shù)和文件

Python的標(biāo)準(zhǔn)類型有:數(shù)字、整型、布爾、長整型、浮點、復(fù)數(shù)、字符串、列表、元組和字典。同時還有如下內(nèi)建類型:類型(對,類型本身是一種類型)、Null對象、文件、集合、函數(shù)/方法、模塊、類。

類型也是一種對象,因為對象的一系列固有行為和特性需要事先定義,我們用類型這種對象來保存這些信息。
用內(nèi)建函數(shù)type()可以得到特定對象的類型信息

>>> type(7)<type 'int'>

這里輸出了<type 'int'>,其實并不是簡單告訴這是一個整數(shù)這樣的字符串,而是一個類型對象,這個對象會輸出一個字符串來告訴你他是一個對象。我們可以這樣測試它

>>> type(type(7))

如果這只是一個字符串,它會顯示<type 'str'>如果是對象類型,它會顯示<type 'type'>

結(jié)果是

>>> type(type(7))<type 'type'>

 

None,Null對象

這是一個特殊的類型,它只有一個值是None,類似于C的void,沒有任何內(nèi)建方法,沒有有用的屬性,布爾值總是False

 

同時還有一些用類實現(xiàn)的內(nèi)部類型,這里暫不贅述。

標(biāo)準(zhǔn)類型運算符
對象值的比較
比較運算符來判斷同類型的對象是否相等,返回True或False。運算符有== 、<= 、 >=。多個比較可以在同一行里進(jìn)行,這一點和C不同。比較的順序式從左到右

>>> 3 < 4 < 5True>>> 3 < 5 < 4False

大多數(shù)語言中會寫成這種形式

>>> 3 < 4 and 4 < 5True>>> 3 < 5 and 5 < 4False

同時,可以用如下的寫法,數(shù)學(xué)中一般不寫

>>> 3 < 5 > 4True

 

對象身份的比較
這是對值比較的補充,Python也支持對象本身的比較。
用的是如下的語句

a is b

它是用于比較a、b兩個變量是否是指向同樣的對象的。和a == b不相同。

a is b等價于
id(a) == id(b)
有如下的代碼

>>> foo1 = 2.0>>> foo2 = 1.0 + 1.0>>> foo1 == foo2True>>> foo1 is foo2False>>> foo1 = 2.0>>> foo2 = 2.0>>> foo1 is foo2False>>> foo2 = foo1>>> foo1 is foo2True>>> foo3 = 2>>> foo4 = 1 + 1>>> foo3 is foo4True

這里可以看到foo1和foo2的值是相等的,但它們身份不相等。也就是說并不是來自同一個引用。說明在內(nèi)部存儲它們時,是各自創(chuàng)建了兩個對象然后引用的。

然后還能看到,當(dāng)我同時給foo1和foo2賦值2.0后,它們并不相等。是創(chuàng)造了兩個對象,只有將foo1直接賦值給foo2才能使它們指向同一個對象。
從此可以理解Python內(nèi)部的賦值方式,每一個值進(jìn)行新對象創(chuàng)造再引用給變量。
但是,如果是對整數(shù),結(jié)果就不同。書里說明:
整數(shù)對象和字符串對象是不可變對象,所以Python 會很高效的緩存它們。這會造成我們認(rèn)為Python 應(yīng)該創(chuàng)建新對象時,它卻沒有創(chuàng)建新對象的假象。
也就是說,整型和浮點型出現(xiàn)不同的緣故是因為Python高效地緩存了它們。不過這個緩存是有范圍的,一定要小心使用。


 

標(biāo)準(zhǔn)類型內(nèi)建函數(shù)
函數(shù)功能
cmp(obj1, obj2) 比較 obj1 和 obj2, 根據(jù)比較結(jié)果返回整數(shù) i:
       i < 0 if obj1 < obj2
       i > 0 if obj1 > obj2
       i == 0 if obj1 == obj2
rePR(obj) 或 `obj`返回一個對象的字符串表示
str(obj)返回對象適合可讀性好的字符串表示
type(obj)得到一個對象的類型,并返回相應(yīng)的type 對象

 

repr()返回的是一個對象的“官方”字符串表示, 也就是說絕大多數(shù)情況下可以通過求值運算(使用eval()內(nèi)建函數(shù))重新得到該對象,但str()則有所不同。str() 致力于生成一個對象的可讀性好的字符串表示,它的返回結(jié)果通常無法用于eval()求值, 但很適合用于 print 語句輸出。也就是說 repr() 輸出對 Python 比較友好, 而str()的輸出對人比較友好。雖然如此,很多情況下這三者的輸出仍然都是完全一樣的。所謂的對Python友好和對人友好將會在數(shù)值這一部分中提到。

類型工廠函數(shù)
Python2.2統(tǒng)一了類型和類,所有的類型也都是類,原來的內(nèi)建轉(zhuǎn)換函數(shù)如type(),int()都成了工廠函數(shù),也就是說雖然看上去像函數(shù),但實際上是類。調(diào)用時是生成了一個類型的實例。
關(guān)于類部分,由于本人學(xué)習(xí)的C語言里沒有過多涉及,等到學(xué)習(xí)到類部分再做筆記。

存儲模型里,
有存儲一個或多個值的標(biāo)量/原子類型,如數(shù)值和字符串。
有容器類型,如列表、元組、字典。
因為Python沒有char類型,所以字符串是一個自我包含的文字類型,不是C中和數(shù)組相同的情況。

更新模型,
對象創(chuàng)建后,可以更新值的是更新模型,不允許更改的是不可變對象。列表和字典是可變模型,數(shù)字、字符串、元組是不可變模型。
這里面存在理解偏差,數(shù)值和字符串變量可換,但對象不可更新,每次變換是重新創(chuàng)造了對象。
也就是說每次變換后id()的值都會發(fā)生變化。而字典和列表,改變值本身,id()始終不變。

訪問模型,
這種分類是區(qū)分?jǐn)?shù)據(jù)類型的首要類型。按照訪問我們存儲的數(shù)據(jù)的方式來分類。有三種訪問方式:直接存取、順序、映射。
直接存取 數(shù)字
順序訪問 字符串、列表、元組
映射訪問 字典
直接存取不贅述,順序訪問的是序列類型,就是元素從0開始索引順序訪問,一次可以訪問一個或者多個元素。
映射類型類似序列類型的索引屬性,但不適用地址偏移量取值,元素是無序存放的,通過一個唯一的key來訪問。是鍵-值集合

分類數(shù)據(jù)類型的原因一是,Python提供的高級數(shù)據(jù),我們要將原始的類型和功能強大的擴(kuò)展類型區(qū)分開,所以需要了解分類。二是幫助我們搞清每種類型的特點。
通過不同方面來分類的原因是這些數(shù)據(jù)結(jié)構(gòu)本身的關(guān)系是復(fù)雜的,需要我們多次分清晰脈絡(luò),讓我們對類型了解更深。

Python沒有的類型
char或byte。Python沒有8位的整數(shù)。可以用長度為1的字符串替代。
指針。Python幫助程序員管理內(nèi)存,所以不用訪問指針。通過id()得到的值很接近地址,但是不能操作,所以指針也就沒有用。
沒有短整長整的區(qū)別,讓程序員更專注于該干的事。
也沒有單雙精度的浮點類型。讓事情更簡單。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 建宁县| 诸暨市| 陆丰市| 泗阳县| 柘荣县| 积石山| 丰宁| 呈贡县| 米易县| 仙游县| 黔西县| 阿尔山市| 托克逊县| 四平市| 辽阳市| 前郭尔| 武宣县| 漾濞| 奇台县| 沧州市| 平和县| 天峨县| 西和县| 江阴市| 永和县| 绥宁县| 湄潭县| 娄烦县| 清流县| 潢川县| 濉溪县| 延边| 建水县| 丰都县| 防城港市| 石首市| 东光县| 南靖县| 营山县| 明星| 桐庐县|