容器序列
list、tuple和collections.deque這些序列可以存放不同型別的資料。存放的是它們所包含的任意型別的物件的引用。
扁平序列
str、bytes、bytearray、memoryview和array.array,這類序列只能容納一種型別。存放的是值而不是引用,扁平序列其實是一段連續的記憶體空間,所以它更加緊湊,但它裡面只能存放諸如字元、位元組和數值這種基礎型別。
可變序列
list、bytearray、array.array、collections.deque和memoryview。
不可變序列
tuple、str和bytes
mutablesequence是可變序列,sequence是不可變序列,從圖中可以看出兩者的差異,也能看到可變序列從不可變序列那裡繼承了一些方法。
列表推導:構建列表的快捷方式
生成器表示式:可以用來建立其他任何型別的序列
列表推導
原則是只用列表推導來建立新的列表,並且盡量保持簡短
symbols = '!@#$%^'
codes=[ord(symbol) for symbol in symbols]
print codes
[33, 64, 35, 36, 37, 94]
笛卡爾積乙個列表,3種不同尺寸的t恤衫,每個尺寸有2個顏色
colors=['black','white']
sizes=['s','m','l']
tshirts=[(color,size) for
color
in colors for
size
in sizes]
print tshirts
[('black', 's'), ('black', 'm'), ('black', 'l'), ('white', 's'), ('white', 'm'), ('white', 'l')]
得到的結果先以顏色排列,再以尺碼排列
迴圈巢狀關係先color在size外層
生成器表示式
使用生成器表示式建立元組和陣列
symbols = '!@#$%^'
tucodes=tuple(ord(symbol) for symbol in symbols)
print tucodes
(33, 64, 35, 36, 37, 94)
import array
arcodes=array.array('i',(ord(symbol) for symbol in symbols))
print arcodes
array('i', [33l, 64l, 35l, 36l, 37l, 94l])
如果生成器表示式是乙個函式呼叫過程中的唯一引數,那麼不需要額外再用括號把它圍起來
array的構造方法需要兩個引數,因此括號是必須的。第一引數』i』指定了陣列中數字的儲存方式
使用生成器表示式計算笛卡爾積
for tshirt in ('%s %s' % (c,s) for c in colors for s in sizes):
print tshirt
black s
black m
black l
white s
white m
white l
記憶體中不會留下乙個有6個組合的列表,生成器表示式會在每次for迴圈執行時才生成乙個組合。 Fluent Python讀書筆記 二
特殊方法的存在是為了被python直譯器呼叫的,自己並不需要呼叫它。所以使用len object 而不是object.len 如果object是乙個自定義類的物件,python會自己呼叫其中由你實現的 len 方法,而如果是python內建的型別 list,str,bytearray等 cpytho...
fluent Python 讀書筆記(二)
對書中1 2 示例中的筆記 1.我們自定義實現乙個類,如何實現這個類的加法,乘法,模等性質呢?以二維向量為例。from math import hypot class vector def init self,x 0,y 0 self.x x self.y y def repr self retur...
fluent Python 讀書筆記(五)
今天寫對於 這本書第三章的回顧 1.可雜湊的資料型別 原子不可變資料型別 數值,str 都是可雜湊的 元組只有它所有元素是可雜湊的它才是雜湊的 什麼叫可雜湊的資料型別?1.要能實現hash方法,且每次hash出來的值是一樣的 2.要能實現eq方法,a b為true 時雜湊值也想等 2.建立字典有很多...