迭代器 推導式 函式式程式設計學習筆記

2022-09-15 10:42:12 字數 2335 閱讀 1933

1、迭代器簡介

python中很多物件都是迭代器,例如列表、元組、字串、檔案、對映、集合。

所有可迭代的類必須實現__iter__()函式,得到迭代器物件,通常返回自身(即自身就是迭代器物件);

所有的迭代器類都實現了next()函式,當然迭代器類也需要實現__iter__()函式;3.0中是__next__()函式。

2、迭代器常見用法

用法1: for 變數 in 可迭代物件

用法2:if 變數 in 可迭代物件

用法3(較少使用):變數 = iter(可迭代物件),然後迴圈iter.next()得到每個值,直到stopiteration異常出現。

如果想重新迴圈,沒有回到開頭的函式,可以重新得到迭代器變數,例如:it = iter(mylist) it2 = iter(it)

3、列表推導式的三種形式

基本形式: [結果表示式 for 變數 in 可迭代物件] 其中結果表示式包含迴圈變數

例如:[x**2 for x in range(10)]

擴充套件形式(增加條件):[結果表示式 for 變數 in 可迭代物件 if 條件表示式] 其中條件表示式對迴圈變數進行檢查

例如:[x**2 for x in range(10) if x > 10]

擴充套件形式(多重迴圈): [結果表示式 for 變數 in 可迭代物件 for 變數2 in 可迭代物件2 ]

多重迴圈中還可以包含 if 條件表示式,對前一迴圈變數等進行過濾判斷。

例如:[(x,y) for x in range(10) for y in range(10, 20)]

[max(x,y) for x in range(10) for y in range(10, 20)]

[max(x,y) for x in range(10) for y in range(10, 20) for z in range(20, 30)]

4、map/reduce/filter

map(function, 可迭代物件): 對可迭代物件的每乙個元素,代入單引數的函式,得到的結果依次放入列表,最後得到列表。

reduce(function, 可迭代物件 [,可選的初始值]):從可迭代物件中先取兩個元素,代入這個雙引數的函式,得到乙個結果值,然後再取出下乙個值,將結果值和下乙個值傳入函式,再將結果與下乙個值進行計算,最後得到乙個列表。如果指定了可選的初始值,則第一次從可迭代物件中只取乙個元素,將初始值和第乙個元素代入函式。

舉例: map(x**2 for x in [1,3,5]) 等效於 [x**2 for x in [1,3,5]]

map(string.lower, ['4a', 'df']) 得到 ['4a', 'df'])

map/reduce/filter 常與lambda函式式結合起來用。

5、lambda 匿名函式

格式: lambda 變數列表: 單一表示式

例如: f = lambda x: x**2 assert( f(2) == 4 ) map(f, [3, 5])

也可直接: map(lambda x: x**2, [3, 5])

兩個引數的例子: reduce(lambda x,y: x+y, [1, 3, 5])

6、lambda 遞迴函式

f = lambda n: n > 2 and f(n-1)+f(n-2) or 1

map(f, range(1,10))

得到:[1, 1, 2, 3, 5, 8, 13, 21, 34]

提示1:表示式中可以有函式變數名

提示2:通過 and 和 or 表達條件和多語句的效果

7、三元表示式

從lambda 遞迴函式順帶說明三元表示式: a if b else c ,等效於c++的 「b ? a : c」

8、簡單生成器表示式

如果元素很多,才用列表會一次性載入所有元素,此時可以使用生成器表示式,即將中括號改為小括號()。

例如 [ x**2 for x in range(10000) ] 會一次性分配10000個元素的乙個列表,而「 x**2 for x in range(10000) 」則只是乙個表示式,此時並沒有分配元素空間。

例如 for v in (x**2 for x in range(10000))

傳入函式中時不需要加兩個小括號,例如 sum(x**2 for x in range(10000))

迭代器 推導式 函式式程式設計學習筆記

1 迭代器簡介 python中很多物件都是迭代器,例如列表 元組 字串 檔案 對映 集合。所有可迭代的類必須實現 iter 函式,得到迭代器物件,通常返回自身 即自身就是迭代器物件 所有的迭代器類都實現了next 函式,當然迭代器類也需要實現 iter 函式 3.0中是 next 函式。2 迭代器常...

談談函式式程式設計與推導式程式設計

lambda 返回函式 f lambda x,y x y f 3,5 8 推導式 out x 2 for x in range 4 也可多新增 x,y for x in range 4 for y in rannge x 還可以增加判斷語句 x,y for x in range 4 for y in...

Python學習筆記 函式式程式設計 裝飾器

根據廖雪峰python教程整理 由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2013 12 25 f now f 2013 12 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now...