Python核心編程第四章筆記

所有的Python對像都擁有三個特性:身份,類型和值


身份:

每一個對象都有一個唯一的身份標識自己,任何對象的身份可以使用內建函數id()來得到。這個值可以被認爲是該對象的內存地址。

類型:

對象的類型決定了該對象可以保存什麼類型的值,可以進行什麼樣的操作,可以用內建函數type()查看Python對象的類型。

值:

對象表示的數據項


標準類型

數字(分爲幾個子類型,其中有三個是整型)

整型

布爾型

長整型

浮點型

複數型

字符串

列表

元組

字典

其他內建類型

類型

Null對象(None)

文件

集合/固定集合

函數/方法

模塊


>>>type(type(42))

<type'type'>


下列對象的布爾值是False

None

False(布爾類型)

所有的值爲零的數:

0(整型)

(浮點型)

0L(長整型)

0.0+0.0j(複數)

""(空字符串)

[](空列表)

()(空元組)

{}(空字典)



>>>foostr = 'abcde'

>>>foostr[::-1]

'edcba'

>>>foostr[::-2]

'eca'

>>>foolist = [123, 'xba', 342.23, 'abc']

>>>foolist[::-1]

['abc',342.23, 'xba', 123]


調用內建函數xrange()會生成一個Xrange對象,xrange()是內建函數range()的兄弟版,用於需要節省內存使用或range()無法完成的超大數據集場合。


3:foo1 foo2指向不同的對象

foo1= 4.3

foo2= 1.3 + 3.0

兩個不同的對象,儘管這兩個對象有同樣大小的數值。

Python提供了isisnot

運算符來測試兩個變量是否指向同一個對象。象下面這樣執行一個測試

ais b這個表達式等價於下面的表達式id(a)== id(b)


Python僅緩存簡單整數,因爲它認爲在Python應用程序中這些小整數會經常被用到。


str()repr()(``運算符)

內建函數str()repr()或反引號運算符(``)可以方便的以字符串的方式獲取對象的

內容、類型、數值屬性等信息。str()函數得到的字符串可讀性好,repr()函數得到的字符

串通常可以用來重新獲得該對象,通常情況下obj== eval(repr(obj)) 這個等式是成立的。

這兩個函數接受一個對象做爲其參數,返回適當的字符串。



str(),repr()``運算在特性和功能方面都非常相似,事實上repr()``做的

是完全一樣的事情,它們返回的是一個對象的“官方”字符串表示,也就是說絕大多數情況下

可以通過求值運算(使用eval()內建函數)重新得到該對象,str()則有所不同。str()致力

於生成一個對象的可讀性好的字符串表示,它的返回結果通常無法用於eval()求值,但很適

合用於print語句輸出。需要再次提醒一下的是,並不是所有repr()返回的字符串都能夠用

eval()內建函數得到原來的對象:

>>>eval(`type(type))`)

File"<stdin>", line 1

eval(`type(type))`)

^

SyntaxError:invalid syntax

repr()輸出對Python比較友好,str()的輸出對人比較友好。很多情況下這三者的輸出仍然都是完全一樣的。


表達式:

iftype(num) == type(0)...

減少函數調用的次數

如果我們仔細研究一下我們的代碼,會看到我們調用了兩次type()。要知道每次調用函數

都會付出性能代價,如果我們能減少函數的調用次數,就會提高程序的性能。

利用在本章我們前面提到的types模塊,我們還有另一種比較對象類型的方法,那就是

將檢測得到的類型與一個已知類型進行比較。如果這樣,我們就可以直接使用type對象而不

用每次計算出這個對象來。那麼我們現在修改一下代碼,改爲只調用一次type()函數:

>>>import types

>>>if type(num) == types.IntType...

減少查詢次數

這是一個對前一個例子較小的改進,如果你的程序像我們的例子中做很多次比較的話,序的性能就會有一些差異。爲了得到整數的對象類型,解釋器不得不首先查找types這個模塊的名字,然後在該模塊的字典中查找IntType。通過使用from-import,你可以減少一次查詢:

fromtypes import IntType

iftype(num) is IntType...


ifisinstance(num, int)...

發佈了30 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章