標籤:reverse str 高階函數 list 函數式編程 ted 參數 編程 預設
--高階函數:map reduce sorted filter
--函數式編程
純粹的函數式程式設計語言編寫的函數沒有變數,允許把函數本身作為參數傳入另一個函數,允許返回一個函數,python語言部分支援
能夠把函數當成參數傳入,這樣的函數叫高階函數,常用的有 map reduce filter sorted
# 高階函數 :能夠把函數當成參數傳入,這樣的函數叫高階函數
# 高階函數 map
"""
map(fn,lsd)
fn 內建函數 或者 自訂函數
lsd 具有可迭代性的資料(容器類型資料,可迭代對象,迭代器)
功能 把lsd中的所有資料 一一應用在fn函數中 ,
返回迭代器
"""
# 案例1 int內建函數
listvar = ["3","5","7","9"]
diedaiqi = map(int,listvar)
# 案例2 myfunc自訂函數
listvar = [1,2,3,4,5]
# [1,4,9,16,25]
def myfunc(n):
return n ** 2
res = map(myfunc,listvar)
print(res)
res = list(res)
print(res)
# 小練習 {1:‘a‘,2:‘b‘,3:‘c‘} [a,b,c] [1,2,3]
def zidian(keys):
dictvar = {1:‘a‘,2:‘b‘,3:‘c‘}
dictvar2 = {}
for keyvar,valvar in dictvar.items():
dictvar2[valvar] = keyvar
return dictvar2[keys]
res = zidian(‘b‘)
print(res)
res = map(zidian,[‘a‘,‘b‘,‘c‘])
res = list(res)
print(res)
# 高階函數 reduce
"""
reduce(fn,lsd)
fn 內建函數 或者 自訂函數
lsd 具有可迭代性的資料(容器類型資料,可迭代對象,迭代器)
功能 先拿出lsd這個資料中的前2個值,扔到fn函數中進行運算,
把運算的結果在和lsd中第三個元素一起放到fn函數中在進行運算,
直到lsd所有資料都一一應用到fn函數結束,返回最終的結果
"""
# 案例1
# [5,4,8,8] 5488
listvar = [5,4,8,8]
from functools import reduce
def func(x,y):
return x * 10 + y
res = reduce(func,listvar)
print(res)
# 案例2
# map + reduce 把"789" 轉化成 整型 789
# 通過map 把字串"789" => [7,8,9] 然後套上reduce 即可
def zhuanhua(keys):
dictvar = {‘0‘:0,‘1‘:1,‘2‘:2,‘3‘:3,‘4‘:4,‘5‘:5,‘6‘:6,‘7‘:7,‘8‘:8,‘9‘:9}
return dictvar[keys]
res = reduce(func,map(zhuanhua,"789"))
print(res,type(res))
#高階函數 sorted
"""
sorted(lsd,reverse=False,key=函數)
lsd 具有可迭代性的資料(容器類型資料,可迭代對象,迭代器)
reverse 預設升序 True 代表降序
key 可以自訂 或者 使用內建函數
返回一個列表
"""
# 案例1 預設按照升序排列
listvar = [18,12,5,26]
res = sorted(listvar)
print(res)
# 案例2 使用降序
listvar = [18,12,5,26]
res = sorted(listvar,reverse=True)
print(res)
# 案例3
listvar = [78,-8,0,3]
res = sorted(listvar)
print(res)
# 案例4
# 把列表裡面的資料 一個一個依次通過abs轉化成絕對值之後再排序
listvar = [78,-8,0,3]
help(sorted)
res = sorted(listvar,key=abs)
print(res,type(res))
# 案例5
def ceshi001(n):
return n % 4
"""
2302 按照餘數的大小 對原列表中的值排序,產生新的列表
"""
listvar = [22,99,88,66]
res = sorted(listvar,key=ceshi001)
print(res)
#高階函數 filter
"""
filter(func,lsd)
lsd 具有可迭代性的資料(容器類型資料,可迭代對象,迭代器)
func 自訂的函數
功能:用來過濾的,通過把lsd中的每一個資料依次應用在func函數中,
如果func函數返回True ,則保留此資料,如果func函數返回False,則捨棄此資料
返回迭代器
"""
# 案例1 過濾所有奇數 得所有偶數
listvar = [1,2,3,4,5,6,7,8,9]
def myfunc(n):
if n % 2 == 0:
return True
else:
return False
res = filter(myfunc,listvar)
# print(list(res))
# 案例2 用lambda運算式來最佳化案例1
def myfunc(n):
func = lambda n : True if n % 2 == 0 else False
res = func(n)
return res
res = filter(myfunc,range(1,10))
print(list(res))
Python_物件導向_高階函數