1. 程式人生 > >流暢的python和cookbook學習筆記(一)

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

構造函數 推導 笛卡爾 expr 列表推導 叠代 建立 笛卡兒 imp

1.數據結構

1.1 內置序列類型

  四種序列類型:

  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.2 列表推導

  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.3 生成器表達式

  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.4 笛卡爾積 

  笛卡兒積是一個列表,列表裏的元素是由輸入的可叠代類型的元素對構成的元組,因此笛卡兒積列表的長度等於輸入變量的長度的乘積。

  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和cookbook學習筆記(一)