Fluent Python讀書筆記 三

2021-08-10 16:25:54 字數 1985 閱讀 1202

容器序列

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.建立字典有很多...