摘自謬雪峰map()作為高階函式,事實上它把運算規則抽象了,因此,我們不但可以計算簡單的f(x)=x2,還可以計算任意複雜的函式,比如,把這個list所有數字轉為字串:
>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
只需要一行**。
再看reduce的用法。reduce把乙個函式作用在乙個序列[x1, x2, x3, ...]上,這個函式必須接收兩個引數,reduce把結果繼續和序列的下乙個元素做累積計算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
from functools import reduce
digits =
def str2int(s):
def fn(x, y):
return x * 10 + y
def char2num(s):
return digits[s]
return reduce(fn, map(char2num, s))
def lazy_sum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum
返回閉包時牢記一點:返回函式不要引用任何迴圈變數,或者後續會發生變化的變數。在函式lazy_sum中又定義了函式sum,並且,內部函式sum可以引用外部函式lazy_sum的引數和區域性變數,當lazy_sum返回函式sum時,相關引數和變數都儲存在返回的函式中,這種稱為「閉包(closure)」的程式結構擁有極大的威力。
SICP歸納 2 高階函式和資料抽象
書中展示了非常多有趣的句法 syntax 如今我們要讓思想進一步的抽象。寫這篇部落格的時候並未學完整本書。更不敢說對書中的內容有乙個多深的領悟。但我一路學習過來。就感覺書中的演示樣例越來越抽象,作者所引導我們的也是如此方向。博文也會持續更新下去,伴隨著我的理解。在這個專欄的 scheme歸納 4 高...
SICP歸納 2 高階函式和資料抽象
在這個專欄的 scheme歸納 4 高階函式中已經初步介紹了什麼是高階函式 higher order procedures 而在這一節中,將用高階函式來做抽象。書中分了許多小節來逐一介紹這一主題。在 過程作為引數 中,書中用了許許多多的相似示例來概括起乙個抽象的操作。lambda用和define同樣...
C 高階程式設計 抽象
在 c 中,我們使用訪問標籤來定義類的抽象介面。乙個類可以包含零個或多個訪問標籤 使用公共標籤定義的成員都可以訪問該程式的所有部分。乙個型別的資料抽象檢視是由它的公共成員來定義的。使用私有標籤定義的成員無法訪問到使用類的 私有部分對使用型別的 隱藏了實現細節。訪問標籤出現的頻率沒有限制。每個訪問標籤...