1. 程式人生 > >Python函數式編程(把函數作為參數傳入)

Python函數式編程(把函數作為參數傳入)

lis list __name__ 就是 ret func port rgs color

map:接受兩個參數(函數,Iterable),map將傳入的函數依次作用於Iterable的每個元素,並且返回新的Iterable
def f(x):
    return x*x
r = map(f,[1,2,3,4])    #此時的r為惰性求值——可用next()和for...in取值
#通過list()返回全部
print(list(r))  #[1, 4, 9, 16]
reduce:接受兩個參數(函數,序列),reduce把一個函數作用於序列上,返回的結果繼續和序列的下一個元素做累積計算,其效果為:reduce(f,[x,y,z])=>f(f(x,y),z)
from
functools import reduce def add(x,y): return x+y reduce(add,[1,3,5,7,9]) #25
filter:過濾序列。接受兩個參數(函數,序列),filter把函數作用於序列上,根據返回值是否為True,決定是否放棄該元素
def is_odd(x):
    return x%2==1
list(filter(is_odd,[1,2,3,4,5,6,7,8,9]))    #filter惰性求值[1, 3, 5, 7, 9]
sorted:排序,可排序對象包括數字list、字符串list、dict等,可接受三個參數,後兩個為可選
#
sorted([],key=express,reverse=True) key:對每個元素的處理方法 reverse:是否反向排序 sorted([0,1,-2,-1,6,3,8],key=abs,reverse=True) #[8, 6, 3, -2, 1, -1, 0]
匿名函數 lambda:匿名函數關鍵字 :前的元素表示匿名函數的參數 匿名函數不用謝return表達式,返回值就是該表達式的值
m = list(map(lambda x: x*x,[1,2,3,4]))
print(m)    #[1, 4, 9, 16]
裝飾器:代碼運行期間動態增加功能
#在now函數運行前自動打印日誌
import functools def log(func): @functools.wraps(func) def wrpper(*args,**kw): print("call %s()" % func.__name__) return func(*args,**kw) return wrpper # 調用裝飾器 @log def now(): print("hello") now() #call now() hello
偏函數:functools.partial 把函數的某些參數固定住,返回一個新的函數,使調用更簡單
import functools
int2 = functools.partial(int,base=2)
print(int2("1000000"))  #64

Python函數式編程(把函數作為參數傳入)