乙個最簡單的高階函式:
def add(x, y, f):
return f(x) + f(y)
當我們呼叫add(-5, 6, abs)時,引數x,y和f分別接收-5,6和abs,根據函式定義,我們可以推導計算過程為:
x = -5
y = 6
f = abs
f(x) + f(y) ==> abs(-5) + abs(6) ==> 11
return 11
>>> add(-5, 6, abs)
11
編寫高階函式,就是讓函式的引數能夠接收別的函式。
把函式作為引數傳入,這樣的函式稱為高階函式,函式式程式設計就是指這種高度抽象的程式設計正規化。
map/reduce
python內建了map()和reduce()函式。
>>> def f(x):
... return x * x
...>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
map()傳入的第乙個引數是f,即函式物件本身。由於結果r是乙個iterator,iterator是惰性序列,因此通過list()函式讓它把整個序列都計算出來並返回乙個list。
比方說對乙個序列求和,就可以用reduce實現:
>>> from functools import reduce
>>> def add(x, y):
... return x + y
...>>> reduce(add, [1, 3, 5, 7, 9])
25
當然求和運算可以直接用python內建函式sum(),沒必要動用reduce。
但是如果要把序列[1, 3, 5, 7, 9]變換成整數13579,reduce就可以派上用場:
>>> from functools import reduce
>>> def fn(x, y):
... return x * 10 + y
...>>> reduce(fn, [1, 3, 5, 7, 9])
13579
把str轉換為int的函式:
>>> from functools import reduce
>>> def fn(x, y):
... return x * 10 + y
...>>> def char2num(s):
... return [s]
...>>> reduce(fn, map(char2num, '13579'))
13579
from functools import reduce
def str2int(s):
def fn(x, y):
return x * 10 + y
def char2num(s):
return [s]
return reduce(fn, map(char2num, s))
10 函式高階
今日主要內容 1.動態傳參 重點 形參 聚合 位置引數 元組 關鍵字 字典 實參 打散 列表,字串,元素 字典 形參順序 重點 位置,args,預設值,kwargs 無敵傳參 def func args,kwargs arguments引數 keyword arguments關鍵字引數 pass 2...
note10 高階函式
1 函式可以直接賦值給變數,變數可以指向函式 f abs f 10 10 2 函式名其實就是指向函式的變數,可以把函式名看作變數 3 乙個函式可以接收另乙個函式作為引數,這種函式稱之為高階函式 4 map 函式接收兩個引數,乙個是函式,乙個是iterable,map 將傳入的函式依次作用到序列的每個...
day10 函式高階
1.1什麼是返回值 返回值就是從函式內部傳遞到函式外部的資料 預設情況下函式內部產生的新資料,在函式外部不能使用 1.2怎麼確定函式返回值 1 python中每個函式都有返回值,預設情況下是none,返回值是什麼就看執行函式體的時候遇到的return關鍵字後面的資料是什麼 如果沒有遇到return,...