##高階函式定義
函式本身也可以賦值給變數,即變數可以指向函式
f=max
print f(3,4)
既然變數可以指向函式,函式的引數能接收變數,那麼乙個函式就可以接收另乙個函式作為引數,這種函式就稱之為高階函式。函式名其實就是指向函式的變數
f=abs #變數f指向函式ads
def add(x,y,f): #f即函式ads作為add函式的引數
return f(x) + f(y)
print add(-5,-7,f)
計算過程
x ==> -5
y ==> -7
f ==> abs
f(x) + f(y) ==> abs(-5) + abs(6) ==> 12
map函式
map() 函式接收兩個引數,乙個是函式,乙個是序列, map 將傳入的函式依
次作用到序列的每個元素,並把結果作為新的 list 返回。
reduce函式reduce 把乙個函式作用在乙個序列[x1, x2, x3…]上,這個函式必須接
收兩個引數,reduce 把結果繼續和序列的下乙個元素做累積計算。
reduce函式函式至少需要兩個引數,第乙個引數是函式名《注意,函式名必須傳遞兩個引數》
第二個引數是序列(str,list,tuple)reduce的功能:把序列中的前兩個元素作為引數(add(1,2)),傳遞給函式進行執行
#節乘
def add(x,y):
return x*y
print reduce(add,range(1,4))
filter函式filter() 也接收乙個函式和乙個序列。和 map() 不同的時,
filter() 把傳入的函式依次作用於每個元素,然後根據返回值是 true
還是 false 決定保留還是丟棄該元素。
把乙個序列中的空字串刪
li=[1,2,3,4,'','6']
def kong(x):
return x
print filter(kong,li),len(filter(kong,li))
sorted函式• 排序也是在程式中經常用到的演算法。 無論使用氣泡排序還是快速
排序,排序的核心是比較兩個元素的大小。通常規定如下:
x < y, return -1
x == y, return 0
x > y, return 1
#可以對列表進行排序
import random
li = random.sample([i for i in range(10)],6)
print li
print sorted(li)
#倒敘排序
匿名函式
lambda適用於定義小型函式,在函式中僅能包含單一的引數表示式,而不能包含其他語句
•當我們在傳入函式時,有些時候,不需要顯式地定義函式,直接傳入匿名函式更方便。
•關鍵字 lambda 表示匿名函式,冒號前面的 x 表示函式引數
print map(lambda x: x*x,[1,2,3,4])
#冒號左邊是輸入的引數,右邊是返回出來值
• 匿名函式有只能有乙個表示式,不用寫 return ,返回值就是該表示式的結果。
• 因為匿名函式沒有名字,不必擔心函式名衝突。 此外,匿名函式也是乙個函式對
象,也可以把匿名函式賦值給乙個變數,再利用變數來呼叫該函式;
f=lambda x: x*x #將匿名函式函式付給變數,通過呼叫變數來呼叫函式
•也可以把匿名函式作為返回值返回
def build(x,y):return lambda: x*x+y*y #將匿名函式作為返回值
print build(1,2)
a=build(1,2)
print a()
不能在lambda中使用print
python 函式高階 python 函式高階
形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...
Python高階 函式高階
閉包 closure 常規函式中可以在函式的引數中新增引數的預設值來簡化函式的操作,偏函式也可以做到這一點,而且會更加的方便管理函式的操作。通過內建模組functools的partial進行定義和處理 語法結構 新函式名稱 functools.partial 函式名稱,預設賦值引數 例如 全域性函式...
python 函式 高階函式
filter 函式是 python 內建的另乙個有用的高階函式,filter 函式接收乙個函式 f 和乙個list,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。例如判斷奇偶數 def...