日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python—高阶函数

發布時間:2025/3/11 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python—高阶函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是內置高階函數
一個函數可以作為參數傳給另外一個函數,或者一個函數的返回值為另外一個函數(若返回值為該函數本身,則為遞歸),滿足其一則為高階函數。
Python中內置了幾個常用的高階函數,比如map( )函數、reduce( )函數、filter( )函數和sorted( )函數。
abs函數:
abs() 函數返回數字的絕對值。

>>> a = -1 >>> print(abs(a)) 1 >>> print(abs(-15)) 15 >>> f = abs >>> print(f(-10)) 10

函數本身也可以賦值給變量,變量可以指向函數:

def double(x):return 2*x # 定義一個函數, f = double # 將函數賦值給變量 print(f(2)) # 通過變量可以調用函數

map函數
map()函數接收的是兩個參數,一個函數,一個序列(列表),其功能是將傳入的函數依次作用到序列的每個元素,并且把結果作為新的序列返回。
1 . 對于一個序列[-1,3,-4,-5]的每一個元素求絕對值

li1 = [-1,3,-4,-5] li2 = map(abs,li1) # 將abs 函數依次作用于序列了li1中的每一個元素,并將處理后的結果返回序列 print(list(li2))運行結果: [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函數
reduce():把一個函數作用在一個序列上,這個函數必須接收兩個參數
reduce把結果繼續和序列的下一個元素做累積計算
reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4)

python2中:reduce是內置函數
python3中 from functools import reduce

from functools import reduce #import functools #functools.reduce() def multi(x,y):return x*y print(reduce(multi,range(1,5)))def add(x,y):return x+y print(reduce(add,range(1,6)))運行結果: 24 15

filter函數

filter過濾函數
和map()類似的,也接收一個函數和一個序列
但是和map()不同的是,filter()把傳入的函數依次作用于
每個元素,然后根據返回值是True或者False決定保留還是丟棄該元素

def isodd(num):if num % 2 == 0:return Trueelse:return Falseprint(list(filter(isodd,range(100))))運行結果: [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]

lambda匿名函數
lambda()匿名函數是指一類無需定義標識符(函數名)的函數或子程序。
lambda 函數可以接收任意多個參數 (包括可選參數) 并且返回單個表達式的值。
匿名函數的關鍵字為 lambda。
冒號前面是形參,冒號后面是返回值。

示例:分別打印元素的累加、平方、范圍內的所有偶數

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))))運行結果: 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( )函數
sorted( )函數是用來對可迭代對象排序的,與列表的list( )函數不同,后者是在原位置上進行排序的,排序后原列表的元素順序會發生改變,而前者是將排序后的結構生成到一個新的列表中。

a = [1,3,8,4,9,2,6] a.sort() print(a) b = [9,3,6,8,2,7,4] c = sorted(b) print(b) print(c)運行結果: [1, 2, 3, 4, 6, 8, 9] a的原列表元素順序發生改變 [9, 3, 6, 8, 2, 7, 4] b 列表順序沒有改變 [2, 3, 4, 6, 7, 8, 9] 新生成的列表中存放排序之后的元素

練習:
1 . 將一個字符串轉換成整型 ‘332.31321’

from functools import reducedef str2int(s):def char2int(ch):c = {str(x): x for x in range(10)}return c[ch]def fun(n1, n2):return n1 * 10 + n2return reduce(fun, map(char2int, s))num = str2int('12345') print(type(num), num)運行結果: <class 'int'> 12345

2.利用map()函數,把用戶輸入的不規范的英文名字,變為首字母大寫,其他小寫的規范名字

def zz(x):return x.capitalize() name = input('請輸入英文名字:') print(list(map(zz, name.split())))運行結果: 請輸入英文名字:faker ['Faker']

3.利用map和reduce編寫一個str2float函數,把字符串’123.456’轉換成浮點數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'))運行結果: 345.678

4.回數是指從左向右讀和從右向左讀都是一樣的數,例如12321,909。請利用filter()篩選出回數

def huishu(s):s = str(s)return s == s[::-1] li = [123,23432,121,4567,12421] print(list(filter(huishu,li)))運行結果: [23432, 121, 12421] 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的python—高阶函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。