1.變數可以指向函式
abs(-10)是函式呼叫,而abs是函式本身
要獲得函式呼叫結果,我們可以把結果賦值給變數:
x=abs(-10)
print(x)
10如果乙個變數指向了乙個函式,
f=abs
print(f(-10))
10說明變數f現在已經指向了abs函式本身。直接呼叫abs()函式和呼叫變數f()完全相同。
2.函式名也是變數,函式名其實就是指向函式的變數!對於abs()這個函式,完全可以把函式名abs看成變數,它指向乙個可以計算絕對值的函式!
3.傳入函式
既然變數可以指向函式,函式的引數能接收變數,那麼乙個函式就可以接收另乙個函式作為引數,這種函式就稱之為高階函式。
def add(x,y,f):
return f(x)+f(y)
print(add(-5,6,abs))
11當我們呼叫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
4.map/reduce
1.map,map()函式接收兩個引數,乙個是函式,乙個是iterable,map將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。
數f(x)=x2,要把這個函式作用在乙個list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()實現如下:
def f(x):
return x*x
r=map(f,[1,2,3,4,5,6,7,8,9])
print(list®)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
map()傳入的第乙個引數是f,即函式物件本身。由於結果r是乙個iterator,iterator是惰性序列,因此通過list()函式讓它把整個序列都計算出來並返回乙個list。
map()作為高階函式,但可以計算簡單的f(x)=x2,還可以計算任意複雜的函式,比如,把這個list所有數字轉為字串:
print(list(map(str,[1,2,3,4,5,6,7,8,9])))
[『1』, 『2』, 『3』, 『4』, 『5』, 『6』, 『7』, 『8』, 『9』]
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
但是如果要把序列[1, 3, 5, 7, 9]變換成整數13579,reduce就可以派上用場:
from functools import reduce
def fn(x,y):
return x*10+y
print(reduce(fn,[1,3,5,7,9]))
13579
配合map(),我們就可以寫出把str轉換為int的函式:
from functools import reduce
def fn(x,y):
return x*10+y
def char2num(s):
digits =
return digits[s]
print(reduce(fn, map(char2num, 『13579』)))
13579
高階函式 map,reduce
map func,iterables map是內建函式,不需要匯入模組 func表示函式名,該函式必須是得傳入乙個引數,還必須有返回值 iterables表示可迭代物件 即含多個元素,如 列表,元組,字典,集合,字串等 作用 對迭代物件中每乙個元素進行func函式,並返回新結果封裝成物件,map返回...
高階函式 map reduce
利用map和reduce編寫乙個str2float函式,把字串 123.456 轉換成浮點數123.456 第一次接觸map和reduce,不太了解此 的實現,參考了網上大神的講解 1.新函式的用法index 表示獲取制定字元在字串中的位置 2.表示次方 from functools import ...
高階函式 map reduce
map 變數獨立執行 舉例說明,比如我們有乙個函式f x x2,要把這個函式作用在乙個陣列 1,2,3,4,5,6,7,8,9 上,就可以用map實現如下 arr.map f x 意思為將arr執行f x 返回結果,但不改變原陣列值 reduce 變數套用執行 這個函式必須接收兩個引數,reduce...