Dave Python 練習三 — 對象

來源:互聯網
上載者:User

#encoding=utf-8</p><p>#*************Part 1 : 對象 ******************<br />#Python 對象<br />#Python 使用物件模型來儲存資料。構造任何類型的值都是一個對象。所有的Python 對像都擁有三個特性:身份,類型和值。<br />#身份:<br />#每一個對象都有一個唯一的身份標識自己,任何對象的身份可以使用內建函數id()來得到。這個值可以被認為是該對象的記憶體位址。<br />#類型:<br />#對象的類型決定了該對象可以儲存什麼類型的值,可以進行什麼樣的操作,以及遵循什麼樣的規則。您可以用內建函數type()查看Python 對象的類型。因為在Python 中類型也是對象,所以type()返回的是對象而不是簡單的字串。<br />#值<br />#對象表示的資料項目<br />#<br />#Python 有一系列的基本(內建)資料類型,必要時也可以建立自訂類型來滿足你的應用程式的需求。絕大多數應用程式通常使用標準類型,對特定的資料存放區則通過建立和執行個體化類來實現。</p><p>#對象屬性<br />#某些Python 對象有屬性、值或相關聯的可執行代碼,比如方法(method)。Python 用點(.)標記法來訪問屬性。屬性包括相應對象的名字等等。最常用的屬性是函數和方法,不過有一些Python 類型也有資料屬性。含有資料屬性的對象包括(但不限於):類、類執行個體、模組、複數和檔案。</p><p>#*************Part 2 : 標準類型 ******************<br />#數字(分為幾個子類型,其中有三個是整型)<br />#整型<br />#布爾型<br />#長整型<br />#浮點型<br />#複數型<br />#字串<br />#列表<br />#元組<br />#字典</p><p>#*************Part 3 : 其他內建類型 ******************<br />#類型<br />#Null 對象 (None)<br />#檔案<br />#集合/固定集合<br />#函數/方法<br />#模組<br />#類</p><p>#類型對象和type 類型對象<br />#通過調用type()函數你能夠得到特定對象的類型資訊:<br />#print(type('Dave is DBA'))<br />#--><class 'str'><br />#print(type(88))<br />#--><class 'int'></p><p>#那麼type() 函數的類型是什嗎?<br />#print(type(type(88)))<br />#--><class 'type'></p><p>#由此可見,所有類型對象的類型都是type,它也是所有Python 類型的根和所有Python 標準類的預設元類(metaclass)</p><p>#None, Python 的 Null 對象<br />#Python 有一個特殊的類型,被稱作 Null 對象或者 NoneType,它只有一個值,那就是 None。它不支援任何運算也沒有任何內建方法。None 沒有什麼有用的屬性,它的布爾值總是False。</p><p>#核心筆記:布爾值<br />#所有標準對象均可用於布爾測試,同類型的對象之間可以比較大小。每個對象天生具有布爾 True 或 False 值。Null 物件、值為零的任何數字或者Null 對象 None 的布爾值都是False。<br />#<br />#下列對象的布爾值是False。<br /># None<br /># False (布爾類型)<br /># 所有的值為零的數:<br /># 0 (整型)<br /># (浮點型)<br /># 0L (長整型)<br /># 0.0+0.0j (複數)<br /># "" (Null 字元串)<br /># [] (空列表)<br /># () (空元組)<br /># {} (空字典)<br />#<br />#值不是上面列出來的任何值的對象的布爾值都是 True,例如non-empty、 non-zero 等等。使用者建立的類執行個體如果定義了nonzero(__nonzero__())或length(__len__())且值為0,那麼它們的布爾值就是 False。</p><p>#*************Part 4 : 內部類型 ******************<br />#內部類型有:<br /># 代碼<br /># 幀<br /># 追蹤記錄<br /># 切片<br /># 省略<br /># Xrange<br />#一般的程式員通常不會直接和這些對象打交道。</p><p>#代碼對象<br />#代碼對象是編譯過的Python 原始碼片段,它是可執行對象。通過調用內建函數compile()可以得到代碼對象。代碼對象可以被 exec 命令或 eval()內建函數來執行。代碼對象本身不包含任何執行環境資訊, 它是使用者自訂函數的核心, 在被執行時動態獲得上下文。(事實上代碼對象是函數的一個屬性)一個函數除了有代碼對象屬性以外,還有一些其它函數必須的屬性,包括函數名,文檔字串,預設參數,及全域命名空間等等。</p><p>#幀對象<br />#幀對象表示 Python 的執行棧幀。幀對象包含Python 解譯器在運行時所需要知道的所有資訊。它的屬性包括指向上一幀的連結,正在被執行的代碼對象,本地及全域名字空間字典以及當前指令等。每次函數調用產生一個新的幀,每一個幀對象都會相應建立一個C 棧幀。用到幀對象的一個地方是追蹤記錄對象。</p><p>#追蹤記錄 對象<br />#當你的代碼出錯時, Python 就會引發一個異常。如果異常未被捕獲和處理, 解譯器就會退出指令碼運行,顯示類似下面的診斷資訊:<br /># Traceback (innermost last):<br /># File "<stdin>", line N?, in ???<br /># ErrorName: error reason<br />#當異常發生時,一個包含針對異常的棧跟蹤資訊的追蹤記錄對象被建立。如果一個異常有自己的處理常式,處理常式就可以訪問這個追蹤記錄對象。</p><p>#切片對象<br />#當使用Python 擴充的切片文法時,就會建立切片對象。擴充的切片文法允許對不同的索引切片操作,包括步進切片, 多維切片,及省略切片。多維切片文法是 sequence[start1 : end1,start2 : end2], 或使用省略符號, sequence[...,start1 : end1 ]. 切片對象也可以由內建函數 slice()來產生。步進切片允許利用第三個切片元素進行步進切片,它的文法為sequence[起始索引 : 結束索引 : 步進值]。Python 很早就支援擴充步進切片文法了,但直到Python2.3 以前都必須依靠 C API 或 Jython 才能工作。</p><p>#省略對象<br />#省略對象用於擴充切片文法中,起記號作用。 這個對象在切片文法中表示省略符號。類似Null 對象 None, 省略對象有一個唯一的名字 Ellipsis, 它的布爾值始終為 True.</p><p>#XRange 對象<br />#調用內建函數 xrange() 會產生一個Xrange 對象,xrange()是內建函數 range()的兄弟版本, 用於需要節省記憶體使用量或 range()無法完成的超大資料集場合</p><p>#*************Part 5 : 標準類型運算子 ******************</p><p>#對象值的比較<br />#比較子用來判斷同類型對象是否相等,所有的內建類型均支援比較運算,比較運算返<br />#回布爾值 True 或 False。如果你正在使用的是早於 Python2.3 的版本,因為這些版本還沒有<br />#布爾類型,所以會看到比較結果為整型值 1 (代表True)或 0 (代表False)。<br />#注意,實際進行的比較運算因類型而異。換言之,數字類型根據數值的大小和符號比較,<br />#字串按照字元序列值進行比較,等等。<br />#比較操作是針對對象的值進行的,也就是說比較的是對象的數值而不是對象本身</p><p>#多個比較操作可以在同一行上進行,求值順序為從左至右。<br />#print(3>4>5)<br />#==>(3>4)and(4>5)</p><p>#對象身份比較<br />#作為對值比較的補充,Python 也支援對象本身的比較。對象可以被賦值到另一個變數(通過引用)。因為每個變數都指向同一個(共用的)資料對象,只要任何一個引用發生改變,該對象的其它引用也會隨之改變。<br />#Python 提供了is 和is not 運算子來測試兩個變數是否指向同一個對象。</p><p>#a is b<br />#這個運算式等價於下面的運算式<br />#id(a) == id(b)</p><p>#obj1 is obj2 obj1 和obj2 是同一個對象<br />#obj1 is not obj2 obj1 和obj2 不是同一個對象</p><p>#注意: 整數對象和字串對象是不可變對象,所以Python 會很高效的緩衝它們。這會造成我們認為Python 應該建立新對象時,它卻沒有建立新對象的假象。看下面的例子:<br />#a=1<br />#print(id(a))<br />#-->506090016<br />#b=1<br />#print(id(b))<br />#-->506090016<br />#這裡的變數a和b 都引用了1,所以他們的位置相等。<br />#print(a is b)<br />#-->True</p><p>#如果改成浮點型:<br />#c=2.0<br />#print(id(c))<br />#-->31298760</p><p>#d=2.0<br />#print(id(d))<br />#-->30315720</p><p>#布爾類型<br />#布爾邏輯運算子 and, or 和 not 都是Python 關鍵字,這些運算子的優先順序按從高到低的順序. not 運算子擁有最高優先順序,<br />#只比所有比較子低一級。 and 和 or 運算子則相應的再低一級。<br />#高 ^ not expr expr 的邏輯非 (否)<br /># | expr1 and expr2 expr1 和 expr2 的邏輯與<br />#低 | expr1 or expr2 expr1 和 expr2 的邏輯或</p><p>#*************Part 6 : 標準類型內建函數 ******************<br />#Python 提供了一些內建函數用於這些基本物件類型:cmp(), repr(), str(), type(), 和等同於repr()函數的單反引號(``) 運算子。</p><p>#函數 功能<br />#cmp(obj1, obj2) 比較 obj1 和 obj2, 根據比較結果返回整數 i:<br /># i < 0 if obj1 < obj2<br /># i > 0 if obj1 > obj2<br /># i == 0 if obj1 == obj2<br />#repr(obj) 或 `obj` 返回一個對象的字串表示<br />#str(obj) 返回對象適合可讀性好的字串表示<br />#type(obj) 得到一個對象的類型,並返回相應的type 對象</p><p>#type() 接受一個對象做為參數,並返回它的類型。它的傳回值是一個類型對象。</p><p>#cmp()<br />#內建函數cmp()用於比較兩個對象obj1 和obj2, 如果obj1 小於obj2, 則返回一個負整數,如果obj1 大於obj2 則返回一個正整數, 如果obj1 等於obj2, 則返回0。比較是在對象之間進行的,不管是標準類型對象還是使用者自訂對象。如果是使用者自訂對象, cmp()會調用該類的特殊方法__cmp__()。</p><p>#在Python 3.2裡只有filecmp.cmp(),用來比較2個檔案</p><p>#str()和 repr() (及 `` 運算子)<br />#內建函數 str() 和 repr() 或反引號運算子(``) 可以方便的以字串的方式擷取對象的<br />#內容、類型、數值屬性等資訊。str()函數得到的字串可讀性好, 而repr()函數得到的字元<br />#串通常可以用來重新獲得該對象, 通常情況下 obj == eval(repr(obj)) 這個等式是成立的。<br />#這兩個函數接受一個對象做為其參數, 返回適當的字串。<br />#<br />#儘管str(),repr()和``運算在特性和功能方面都非常相似, 事實上 repr() 和 `` 做的<br />#是完全一樣的事情,它們返回的是一個對象的“官方”字串表示, 也就是說絕大多數情況下<br />#可以通過求值運算(使用eval()內建函數)重新得到該對象,但str()則有所不同。str() 致力<br />#於產生一個對象的可讀性好的字串表示,它的返回結果通常無法用於eval()求值, 但很適<br />#合用於 print 語句輸出</p><p>#type() 和 isinstance()<br />#Python 不支援方法或函數重載, 因此你必須自己保證調用的就是你想要的函數或對象。<br />#type()返回任意Python 對象對象的類型,而不局限於標準類型。<br />#除了內建函數type(), 還有一個有用的內建函數叫 isinstance(),也利用它來確認一個對象的類型。<br />#<br />#每次調用函數都會付出效能代價, 如果我們能減少函數的調用次數, 就會提高程式的效能。</p><p>#*************Part 7 : 類型工廠函數 ******************<br />#Python 2.2 統一了類型和類, 所有的內建類型現在也都是類, 在這基礎之上, 原來的<br />#所謂內建轉換函式象int(), type(), list() 等等, 現在都成了工廠函數。 也就是說雖然他<br />#們看上去有點象函數, 實質上他們是類。當你調用它們時, 實際上是產生了該類型的一個實<br />#例, 就象工廠生產貨物一樣。<br />#下面這些大家熟悉的工廠函數在老的Python 版裡被稱為內建函數:<br /># int(), long(), float(), complex()<br /># str(), unicode(), basestring()<br /># list(), tuple()<br /># type()<br />#<br />#支援新風格的類的全新的資料類型,也添加了相應的工廠函數。下面列出了這些工廠函數:<br /># dict()<br /># bool()<br /># set(), frozenset()<br /># object()<br /># classmethod()<br /># staticmethod()<br /># super()<br /># property()<br /># file()</p><p>#*************Part 8 : 標準類型的分類 ******************</p><p># “基本”,是指這些類型都是Python 提供的標準或核心類型。<br /># “內建”,是由於這些類型是Python 預設就提供的<br /># “資料”,因為他們用於一般資料存放區<br /># “對象”,因為對象是資料和功能的預設抽象<br /># “原始”,因為這些類型提供的是最底層的粒度資料存放區<br /># “類型”,因為他們就是資料類型</p><p>#有三種不同的模型可以協助我們對基本類型進行分類,每種模型都展示給我們這些類型之間的<br />#相互關係。這些模型可以協助我們更好的理解類型之間的相互關係以及他們的工作原理。</p><p>#儲存模型<br />#我們對類型進行分類的第一種方式, 就是看看這種類型的對象能儲存多少個對象。Python<br />#的類型, 就象絕大多數其它語言一樣,能容納一個或多個值。一個能儲存單個字面對象的類型<br />#我們稱它為原子或標量儲存,那些可容納多個對象的類型,我們稱之為容器儲存。(容器物件有<br />#時會在文檔中被稱為綜合物件,不過這些對象並不僅僅指類型,還包括類似類執行個體這樣的對象)<br />#容器類型又帶來一個新問題,那就是它是否可以容納不同類型的對象。所有的Python 容器對<br />#象都能夠容納不同類型的對象。<br />#<br />#字串看上去像一個容器類型,因為它“包含”字元(並且經常多於一個字元),不過由<br />#於Python 並沒有字元類型,所以字串是一個自我包含的文字類型。<br />#<br />#分類 Python 類型<br />#標量/原子類型 數值(所有的數實值型別),字串(全部是文字)<br />#容器類型 列表、元組、字典</p><p>#更新模型<br />#另一種對標準類型進行分類的方式就是, 針對每一個類型問一個問題:“對象建立成功之後,它的值可以進行更新嗎?”<br />#某些類型允許他們的值進行更新,而另一些則不允許。可變對象允許他們的值被更新,而不可變對象則不允許他們的值被更改.<br />#<br />#分類 Python 類型<br />#可變類型 列表, 字典<br />#不可變類型 數字、字串、元組</p><p>#訪問模型<br />#儘管前面兩種模型分類方式在介紹Python 時都很有用,它們還不是區分資料類型的首要模<br />#型。對這種目的,我們使用訪問模型。也就是說根據訪問我們儲存的資料的方式對資料類型進<br />#行分類。在訪問模型中共有三種訪問方式:直接存取,順序,和映射.<br />#<br />#以訪問模型為標準的類型分類<br />#分類 Python 類型<br />#直接存取 數字<br />#順序訪問 字串、列表、元組<br />#映射訪問 字典</p><p>#標準類型分類<br />#資料類型 儲存模型 更新模型 訪問模型l<br />#數字 Scalar 不可更改 直接存取<br />#字串 Scalar 不可更改 順序訪問<br />#列表 Container 可更改 順序訪問<br />#元組 Container 不可更改 順序訪問<br />#字典 Container 可更改 映射訪問<br />#<br />#對非容器類型可以直接存取。所有的數實值型別都歸到這一類。<br />#<br />#序列類型是指容器內的元素按從0 開始的索引順序訪問。一次可以訪問一個元素或多個元<br />#素, 也就是大家所瞭解的切片(slice)。字串, 列表和元組都歸到這一類。我們前面提到過,<br />#Python 不支援字元類型,因此,雖然字串是簡單文字類型,因為它有能力按照順序訪問子字<br />#符串,所以也將它歸到序列類型。<br />#映射類型類似序列的索引屬性,不過它的索引並不使用順序的數字位移量取值, 它的元素<br />#無序存放, 通過一個唯一的key 來訪問, 這就是映射類型, 它容納的是雜湊鍵-值對的集合。</p><p>#*************Part 9 : 不支援的類型 ******************<br />#char 或 byte<br />#Python 沒有 char 或 byte 類型來儲存單一字元或8 位元整數。你可以使用長度為1 的字串表示字元或8 位元整數。<br />#<br />#指標<br />#Python 替你管理記憶體,因此沒有必要訪問指標。在Python 中你可以使用id()函數得到一個對象的身份號, 這是最接近於指標的地址。<br />#因為你不能控制這個值,所以其實沒有太大意義。其實在Python 中, 一切都是指標。<br />#<br />#int vs short vs long<br />#Python 的普通整數相當於標準整數類型,不需要類似C 語言中的 int, short, long 這三<br />#種整數類型。事實上Python 的整數實現等同於C 語言的長整數。 由於Python 的整型與長整型<br />#密切融合, 使用者幾乎不需要擔心什麼。 你僅需要使用一種類型, 就是Python 的整型。即便<br />#數值超出整型的表達範圍, 比如兩個很大的數相乘, Python 會自動的返回一個長整數給你而<br />#不會報錯。<br />#<br />#float VS double<br />#C 語言有單精確度和雙精確度兩種浮點類型。 Python 的浮點類型實際上是C 語言的雙精確度浮<br />#點類型。 Python 認為同時支援兩種浮點類型的好處與支援兩種浮點類型帶來的開銷不成比例,<br />#所以Python 決定不支援單精確度浮點數。對那些寧願放棄更大的取值範圍而需要更高精確度的<br />#使用者來說, Python 還有一種十進位浮點數類型 Decimal, 不過你必須匯入decimal 模組才可<br />#以使用它。浮點數總是不精確的。Decimals 則擁有任意的精度。在處理金錢這類確定的值時,<br />#Decimal 類型就很有用。 在處理重量,長度或其它度量單位的場合, float 足夠用了。</p><p>

-------------------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware 
Weibo: http://weibo.com/tianlesoftware
Email: dvd.dba@gmail.com
DBA1 群:62697716(滿);   DBA2 群:62697977(滿)   DBA3 群:62697850(滿)   
DBA 超級群:63306533(滿);  DBA4 群: 83829929(滿)  DBA5群: 142216823(滿)  
DBA6 群:158654907(滿)  聊天 群:40132017(滿)   聊天2群:69087192(滿)
--加群需要在備忘說明Oracle資料表空間和資料檔案的關係,否則拒絕申請

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.