python—高阶函数
什么是內(nèi)置高階函數(shù):
一個函數(shù)可以作為參數(shù)傳給另外一個函數(shù),或者一個函數(shù)的返回值為另外一個函數(shù)(若返回值為該函數(shù)本身,則為遞歸),滿足其一則為高階函數(shù)。
Python中內(nèi)置了幾個常用的高階函數(shù),比如map( )函數(shù)、reduce( )函數(shù)、filter( )函數(shù)和sorted( )函數(shù)。
abs函數(shù):
abs() 函數(shù)返回數(shù)字的絕對值。
函數(shù)本身也可以賦值給變量,變量可以指向函數(shù):
def double(x):return 2*x # 定義一個函數(shù), f = double # 將函數(shù)賦值給變量 print(f(2)) # 通過變量可以調(diào)用函數(shù)map函數(shù)
map()函數(shù)接收的是兩個參數(shù),一個函數(shù),一個序列(列表),其功能是將傳入的函數(shù)依次作用到序列的每個元素,并且把結(jié)果作為新的序列返回。
1 . 對于一個序列[-1,3,-4,-5]的每一個元素求絕對值
2 . 對于每個元素求階乘
import random def factoria(x):res = 1for i in range(1,x+1):res = res * ireturn res li = [random.randint(2,7) for i in range(10)] print(list(map(factoria,li)))reduce函數(shù)
reduce():把一個函數(shù)作用在一個序列上,這個函數(shù)必須接收兩個參數(shù)
reduce把結(jié)果繼續(xù)和序列的下一個元素做累積計算
reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4)
python2中:reduce是內(nèi)置函數(shù)
python3中 from functools import reduce
filter函數(shù)
filter過濾函數(shù)
和map()類似的,也接收一個函數(shù)和一個序列
但是和map()不同的是,filter()把傳入的函數(shù)依次作用于
每個元素,然后根據(jù)返回值是True或者False決定保留還是丟棄該元素
lambda匿名函數(shù)
lambda()匿名函數(shù)是指一類無需定義標(biāo)識符(函數(shù)名)的函數(shù)或子程序。
lambda 函數(shù)可以接收任意多個參數(shù) (包括可選參數(shù)) 并且返回單個表達式的值。
匿名函數(shù)的關(guān)鍵字為 lambda。
冒號前面是形參,冒號后面是返回值。
示例:分別打印元素的累加、平方、范圍內(nèi)的所有偶數(shù)
from functools import reduce # def add(x,y): # return x+y # print(reduce(add,range(10))) print(reduce(lambda x,y:x+y,range(10))) # def mypow(x): # return x**2 print(list(map(lambda x:x**2,range(5)))) # def isood(num): # return num%2 ==0 print(list(filter(lambda x:x%2==0,range(100))))運行結(jié)果: 45 [0, 1, 4, 9, 16] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]sorted( )函數(shù)
sorted( )函數(shù)是用來對可迭代對象排序的,與列表的list( )函數(shù)不同,后者是在原位置上進行排序的,排序后原列表的元素順序會發(fā)生改變,而前者是將排序后的結(jié)構(gòu)生成到一個新的列表中。
練習(xí):
1 . 將一個字符串轉(zhuǎn)換成整型 ‘332.31321’
2.利用map()函數(shù),把用戶輸入的不規(guī)范的英文名字,變?yōu)槭鬃帜复髮?#xff0c;其他小寫的規(guī)范名字
def zz(x):return x.capitalize() name = input('請輸入英文名字:') print(list(map(zz, name.split())))運行結(jié)果: 請輸入英文名字:faker ['Faker']3.利用map和reduce編寫一個str2float函數(shù),把字符串’123.456’轉(zhuǎn)換成浮點數(shù)123.456
from functools import reduce def str2float(s):s1 = s.split('.')[0]s2 = s.split('.')[1][::-1]c2n = {str(i):i for i in range(1,10)}def number(x):return c2n[x]def before_c2n(x,y):return x*10+ydef after_c2n(x,y):return x*0.1+yreturn reduce(before_c2n,map(number,s1)) + 0.1*reduce(after_c2n,(map(number,s2))) print(str2float('345.678'))運行結(jié)果: 345.6784.回數(shù)是指從左向右讀和從右向左讀都是一樣的數(shù),例如12321,909。請利用filter()篩選出回數(shù)
def huishu(s):s = str(s)return s == s[::-1] li = [123,23432,121,4567,12421] print(list(filter(huishu,li)))運行結(jié)果: [23432, 121, 12421] 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的python—高阶函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模拟断电oracle数据不一致,Orac
- 下一篇: 超清世界地图可放大_3D高清世界地图