高階函數

高階函數

Frist class object

函數在python中是一等公民

函數也是對象,可調用的對象

函數可以作為普通變量,參數,返回值等等

數學概念y=gfx))

在數學和計算機科學中,高階函數應當是至少滿足下面一個條件的函數

接受一個或者多個函數作為參數

輸出一個函數

計數器:

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

過濾數據

mapfunc*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= fx,y)轉換成z= fx)(y)的形式

舉例

def add(x):
def _add(y):
return x+y
return _add
print(add(4)(5))

?

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96910

(0)
zhangmengzhangmeng
上一篇 2018-04-23
下一篇 2018-04-23

相關推薦

  • Python內置數據結構——字符串

    知識結構圖 學習筆記 字符串 字符組成的有序序列,字符的集合 使用單引號、雙引號、三引號引起來的字符序列 不可變對象 Unicode類型 定義 單引號、雙引號、三引號 r、R:引號內的字符原樣輸出 元素訪問 索引訪問 可迭代 join連接 “string“.join(iteratable) 使用string作為分隔符將可迭代對象連接起…

    2018-03-31
  • python summary(for previous 6 weeks)

    Meghan(haven’t been fullly organized)

    2018-04-19
  • Linux介紹

    Linux介紹 Linux概述 Linux概述 Linux內核由芬蘭人Linus Torvalds 1991年根據386架構開發。Linux是系統的內核并非系統,之后的RED HALT 、Centos等都是以Linux為內核的類UNIX操作系統。 1969年UNIX系統由THOMPSON和D.M.Riche在美國貝爾實驗室開發 1990年芬蘭人Linus T…

    Python筆記 2018-03-26
  • Python函數返回值、作用域以及樹的概念

    Python函數返回值、作用域以及樹的概念

    Python筆記 2018-04-15
  • 裝飾器

    裝飾器 需求 一個加法函數,想增強它的功能,能夠輸出被調用過以及調用的參數信息 def add(x, y): return x + y 增加信息輸出功能 def add(x, y): print(“call add, x + y”) ?# 日志輸出到控制臺 return x + y p 上面的加法函數是完成了需求,但是有以下的缺點 打…

    Python筆記 2018-04-23
欧美性久久久久