流暢的python和cookbook學習筆記(一)

2022-04-29 09:24:09 字數 3039 閱讀 9521

四種序列型別:

1.容器序列:list、tuple和collections.deque

2.扁平序列:str、bytes、bytearray、memoryview和array.array

3.可變序列:list、bytearray、array.array、collections.deque 和 memoryview

4.不可變序列:tuple、str 和 bytes

1.列表推導(list comprehension):列表推導是構建列表(list)的快捷方式,簡潔的寫法。

列表推導的作用只有乙個:生成列表。

>>> symbols = '

$¢£¥€¤

' >>> codes = [ord(symbol) for symbol in

symbols] # 用方括號括起來,內部用for迴圈生成多個值

>>>codes

[36, 162, 163, 165, 8364, 164]

2.表示式內部的變數和賦值只在區域性起作用,表示式的上下文裡的同名變數還可以被正常引用,區域性變數並不會影響到它們。

>>> x = '

abc'

>>> dummy = [ord(x) for x in

x] >>>x

'abc

' >>>dummy

[65, 66, 67]

即 x 的值不會被列表推導中的迴圈中的 x 值所影響。

1.生成式表達器(generator expression):生成器表示式遵守了迭代器協議,可以逐個地產出元素,而不是先建立乙個完整的列表,然後再把這個列表傳遞到某個建構函式裡。這樣更節省記憶體。

生成器表示式的語法跟列表推導差不多,只不過把方括號換成圓括號而已。

用生成器表示式初始化元組和陣列:

>>> symbols = '

$¢£¥€¤

' # 初始化元組

>>> tuple(ord(symbol) for symbol in

symbols) # 如果生成器表示式是乙個函式呼叫過程中的唯一引數,那麼不需要額外再用括號把它圍起來。(36, 162, 163, 165, 8364, 164)

>>> import

array # 初始化陣列

>>> array.array('

i', (ord(symbol) for symbol in

symbols)) # array 的構造方法需要兩個引數,因此括號是必需的。array 構造方法的第乙個引數,即('i')指定了陣列中數字的儲存方式。

array('i

', [36, 162, 163, 165, 8364, 164])

笛卡兒積是乙個列表,列表裡的元素是由輸入的可迭代型別的元素對構成的元組,因此笛卡兒積列表的長度等於輸入變數的長度的乘積。

1.使用列表推導計算笛卡兒積

>>> colors = ['

black

', '

white']

>>> sizes = ['

s', '

m', 'l'

] >>> tshirts = [(color, size) for color in colors for size in

sizes]

>>> tshirts

[('black

', '

s'), ('

black

', '

m'), ('

black

', '

l'), ('

white

', '

s'), ('

white

', '

m'), ('

white

', 'l'

)] >>> for color in

colors: # 使用for迴圈是一樣的效果

...

for size in

sizes:

...

print

((color, size))

... ('

black

', 's'

) ('black

', 'm'

) ('black

', 'l'

) ('white

', 's'

) ('white

', 'm'

) ('white

', 'l'

) >>> tshirts = [(color, size) for size in sizes for color in

colors] # 改變引數位置,輸出順序不同

>>>tshirts [('

black

', '

s'), ('

white

', '

s'), ('

black

', '

m'), ('

white

', '

m'), ('

black

', '

l'), ('

white

', '

l')]

2.使用生成器表示式計算笛卡兒積

>>> colors = ['

black

', '

white']

>>> sizes = ['

s', '

m', 'l'

]>>> for tshirt in ('

{} {}

'.format(c, s) for c in colors for s in

sizes):

...

print

(tshirt)

...black s

black m

black l

white s

white m

white l

流暢的python 《流暢的python》第一天

我們看到 python 可以用len 或者arr 0 它們是怎麼實現的,其實就是兩個魔法方法 len 和 getitem 用撲克牌的例子學習一下,我們知道知道撲克牌有花色 黑桃,紅桃,方塊,梅花 有大小 2 10 jqka 如何創造一套牌的物件呢?首先學習collections的namedtuple...

流暢的python和cookbook學習筆記(二)

任何的序列 或者是可迭代物件 可以通過乙個簡單的賦值語句解壓並賦值給多個 變數。唯一的前提就是變數的數量必須跟序列元素的數量是一樣的。1.平行賦值 x 1,2 a,b x 元組拆包 a 1 b 2 2.以用 運算子把乙個可迭代物件拆開作為函式的引數 divmod 20,8 20求8的餘,2 8 4 ...

流暢的python 魔術方法

第一章 流暢的python 裡面的描述 python 的魔術方法 magic method 是特殊方法的暱稱。一般是用 雙下劃線 名稱 雙下劃線 形式來表示,整體念起來也拗口,所以也有人把這種特殊方法名為稱為 雙下方法 dunder method 有關於特殊方法一覽,可以參考data model t...