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