高階函數
Frist class object
函數在python中是一等公民
函數也是對象,可調用的對象
函數可以作為普通變量,參數,返回值等等
數學概念y=g(f(x))
在數學和計算機科學中,高階函數應當是至少滿足下面一個條件的函數
接受一個或者多個函數作為參數
輸出一個函數
計數器:
def counter(base):
def inc(step=1):
base += step
return base
return inc()
自定義sort函數
排序問題:仿照內建函數自行實現一個sort函數(不使用內鍵函數),能夠為列表元素排序
思路:內建函數sorted函數是返回一個新的列表,可以設置成升序或者降序,可以設置一個排序的函數,自定義的sort函數也要實現這個功能
新建一個列表,遍歷源列表,和新的列標配的值一次比較決定如何插入新列表中
def sorts(iterable):
ret = []
for x in iterable:
for i,y in enumerate(ret):
if x > y:
ret.insert(i,x)
break
else:
ret.append(x)
return ret
print((sorts([7,5,9,5,6,7,1,7])))
優化:
def sorts(iterable,reverse=False):
ret = []
for x in iterable:
for i,y in enumerate(ret):
flag = x>y if reverse else x<y
if flag:
ret.insert(i,x)
break
else:
ret.append(x)
return ret
print(sorts([7,89,8,56,7,13,7]))
3、
def sort(iterable, key=lambda a,b : a>b):
ret = [ ]
for x in iterable:
for i, y in enumerate(ret):
if key(x, y): # 函數的返回值是bool
ret.insert(i,x)
break
else:
ret.append(x)
return ret
print(sort([1,2,5,4,2,3,5,6]))
4,
def sort(iterable, reverse=False, key=lambda x,y:x<y):
ret = []
for x in iterable:
for i,y in enumerate(ret):
flag = key(x,y)if not reverse else not key(x,y)
if flag:
ret.insert(i, x)
break
else:
ret.append(x)
return ret
print(sort([1,2,5,4,2,3,5,6]))
?
內建函數–高階函數
sorted(iterable[,key][,resverse])
排序
filter(function,iterable)—-> filter object
過濾數據
map(func,*iterable)—->map object
映射
Sorted(lst.key = lambda x:6-x)#返回新的列表
List.sort(key=lambda x:6-x)#就地修改
filter(function,iterable)#過濾可迭代的對象的元素,返回一個迭代器
function一個具有一個參數的函數,返回bool
列如,過濾出數列中能被3整除的數字
List(filter(lambda x:x%3 == 0,[1,99,33,55,-3,78,28,123]))
Map(function,*iterables)—–> map object
對多個可迭代對象的元素按照指定的函數進行映射,返回一個迭代器
list(map(lambda x:2*x,range(5)))
dict(map(lambda x:(x%5,x),range(500)))
柯里化
指的是將原來接受兩個參數的函數變成新的接受一個參數的函數的過程,新的函數返回一個以原有第二個參數的函數
Z= f(x,y)轉換成z= f(x)(y)的形式
舉例
def add(x):
def _add(y):
return x+y
return _add
print(add(4)(5))
?
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96910