Python基礎-41-高階函數map/reduce/filter/sorted

高階函數

把函數作爲參數傳入,這樣的函數稱爲高階函數,函數式編程就是指這種高度抽象的編程範式

# lambda函數作爲參數傳入

def sum_func(x,y,func):
    res = func(x,y)
    return res

# 調用函數
print(sum_func(50,30,lambda x,y:x+y))

 

map()

map函數接收兩個參數,一個是函數,一個是Iterable,map將傳入的函數依次作用到序列的每個元素,並把結果作爲新的Iterator返回

 

# 定義一個計算平方的函數
def func(x):
    return x*x

# map函數返回的是一個map對象,需要list(map(fun,itor))來將映射之後的map對象轉換成列表
res = map(func,[1,2,3,4,5])
print(list(res))  # 結果:[1, 4, 9, 16, 25]

 

reduce()

reduce()函數接收的參數和 map()類似,一個函數 f,一個可迭代對象,reduce()傳入的函數 f 必須接收兩個參數,reduce()對可迭代對象的每個元素反覆調用函數f,並返回最終結果值。(需要先導入模塊 from functools import reduce)

reduce(function, sequence, initial=None)

function:傳入的函數名

sequence:tuple ,list ,dictionary, string等可迭代物,必需參數

initial:初始值, 可選參數,默認爲None

from functools import reduce

# 定義一個函數,用來拼接字符串
def str_splic(str1,str2):
    return str1+str2
res = reduce(str_splic,["s","u","n","e","r"])
print(res)  # 結果爲:suner

 

filter()

filter()函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表

和map相似,filter()也接收一個函數和一個序列,把傳入的函數依次作用於每個元素,將返回True的元素放到新列表中

def judge_func(x):
    if x>10:
        return True
    else:
        return False
# filter函數返回的是一個filter對象,需要list(filter(fun,itor))來將映射之後的filter對象轉換成列表
res = filter(judge_func,[1,5,8,10,12,16])
print(list(res)) # 結果顯示:[12, 16]

 

sorted()

sorted函數可以接收一個key函數來實現自定義的排序

key指定的函數將作用於list的每一個元素上,根據key函數返回的結果進行排序

 

L = [20,18,-5,0,3,49]
res = sorted(L,key=abs) # 按絕對值大小升序排列
print("升序結果:",res)  # 結果顯示:[0, 3, -5, 18, 20, 49]

res1 = sorted(L,key=abs,reverse=True) # 降序只需要加上 reverse=True 即可
print("降序結果:",res1)  # 結果顯示:[49, 20, 18, -5, 3, 0]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章