最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Python四種常用的高階函數(shù),你會用了嗎

2023-04-06 09:25 作者:碼同學(xué)軟件測試  | 我要投稿

每天進(jìn)步一點(diǎn)點(diǎn),關(guān)注我們哦,每天分享測試技術(shù)文章

本文章出自【碼同學(xué)軟件測試】

碼同學(xué)公眾號:自動化軟件測試,領(lǐng)取資料可加:Matongxue_10

碼同學(xué)抖音號:小碼哥聊軟件測試


1、什么是高階函數(shù)

把函數(shù)作為參數(shù)傳入,這樣的函數(shù)稱為高階函數(shù)

例如:

def func1(x,y,f):

? ? return f(x) + f(y)

num = func1(-10, 2, abs)

print(num)

注意:

把函數(shù)作為參數(shù)傳入的時(shí)候,不要再傳入函數(shù)后面解括號,

abs代表這個取絕對值,abs()表示調(diào)用這個函數(shù),獲取他的返回值


2、常用高階函數(shù)(map,filter,sorted,reduce)

  • map? 映射函數(shù)

一般來說接受兩個函數(shù),第一個函數(shù)使用作用的函數(shù),第二個參數(shù)是要作用的可迭代對象


返回值是一個迭代器

lst = [1,2,3,4,5,6,7]

lst2 = [10,100,1000,10000]

def f1(x,y):

? ? return x + y

map后面可以接受多個可迭代對象,那傳入幾個可迭代對象,前面的函數(shù)就要接受幾個參數(shù)

print(list(map(f1,lst,lst2)))

print(list(map(lambda x,y:x+y, lst, lst2)))

例題:

有列表[1, 2, 3, 4, 5],將所有元素轉(zhuǎn)換成str: ['1', '2', '3', '4', '5']

lst = [1,2,3,4,5]

print(list(map(str,lst)))

  • filter? ?過濾函數(shù)

filter的第一個參數(shù)傳入一個函數(shù),第二個參數(shù)是可迭代對象,將可迭代對象里的每一個值,交給傳入的函數(shù)處理,如果結(jié)果為真,就保留這個值。如果結(jié)果為假,就去掉這個值。


filter也是返回一個迭代器

例如:

去掉偶數(shù),保留奇數(shù)[1,2,3,4,5,6,7,8,9]

print(list(filter(lambda x : x % 2, [1,2,3,4,5,6,7,8,9])))

在一個list中,刪掉偶數(shù),只保留奇數(shù)

lst=['A','','B',None,‘C’,' ','a',1,0]

print(list(filter(lambda x:x and str(x).strip(), lst)))

  • sorted? ? 排序函數(shù)

sorted()函數(shù)也是一個高階函數(shù),它還可以接收一個key函數(shù)來實(shí)現(xiàn)自定義的排序key指定的函數(shù)將作用于list的每一個元素上,并根據(jù)key函數(shù)返回的結(jié)果進(jìn)行排序。


把一個序列中的字符串,忽略大小寫排序


序列:['bob', 'about', 'Zoo', 'Credit']

list1=['bob','about','Zoo','Credit']

print(sorted(list1,key=lambda x:x.lower()))

print(sorted(list1,key=str.lower))

按value來排序

d1 = {"a":3,"b":4,"c":2,"d":5}

print(dict(sorted(d1.items(), key=lambda x:x[1])))

列表里包的排序元素

在元組排序里為False排前面,True排后面


  • reduce 函數(shù)累積求值?(這個函數(shù)用的時(shí)候需要導(dǎo)入)

免費(fèi)領(lǐng)取碼同學(xué)軟件測試課程筆記+超多學(xué)習(xí)資料+完整視頻+面試題,可加微信:Matongxue_10

?這個函數(shù)必須接收兩個參數(shù)

reduce把結(jié)果繼續(xù)和序列的下一個元素做累積計(jì)算


例如:

將列表[1,3,5,7,9] ---->13579

from functools import reduce

s = [1,3,5,7,9]

print(reduce(lambda x,y:x*10+y, s))


練習(xí):

1、利用map批量檢測用戶名是否符合規(guī)范=> username符合規(guī)范, username不符合規(guī)范


只能包含數(shù)據(jù)、字母、下劃線,不以數(shù)字開頭,長度在6-18之間

filter把合法的用戶名顯示出來

lst = ["username","a123","Y_78ju","23hu","was23_67hu"]

import re

def func1(x):

? ? if re.findall(r"^[a-zA-Z_][0-9a-zA-Z_]{5,17}$", x):

? ? ? ? return f"{x}符合規(guī)范"

? ? else:

? ? ? ? return f"{x}不符合規(guī)范"

print(list(map(func1, lst)))

print(list(filter(lambda x:re.findall(r"^[a-zA-Z_][0-9a-zA-Z_]{5,17}$", x), lst)))

2、 匿名函數(shù)+reduce實(shí)現(xiàn) 1*2*3*...*n

from functools import reduce

n=[1,2,3,4,5,6,7]

print(reduce(lambda n,y:n*y, n))

3、filter函數(shù):找出[1-100]能被3整除的數(shù)

print(list(filter(lambda x:x%3==0, range(1,101))))

4、map函數(shù):求list[1-10]各項(xiàng)的平方

print(list(map(lambda x:x*x, range(1,11))))

5、將列表[1,4,5,9] 轉(zhuǎn)換成 '1459'的字符串

from functools import reduce

print(reduce(lambda x,y : str(x)+str(y),[1,4,5,9]))

6、有以下列表:

list1=[7, -8, 5, 4, 0, -2, -5]

  • 正數(shù)在前負(fù)數(shù)在后

  • 整數(shù)從小到大

  • 負(fù)數(shù)從大到小

print(list(sorted(list1,key=lambda x:(x<=0, abs(x)))))

print(sorted(list1,key=lambda x: max(list1)-x+1 if x <=0 else x))

7、這是一個字符串排序,排序規(guī)則:小寫<大寫<奇數(shù)<偶數(shù)

  • s = 'asdf234GDSdsf23'?#排序:小寫-大寫-奇數(shù)-偶數(shù)

  • 原理:先比較元組的第一個值,F(xiàn)ALSE

s = 'asdf234GDSdsf23'

s2 = "".join(sorted(s, key=lambda x: (x.isdigit(),x.isdigit()and int(x) % 2 == 0,x.isupper(),x)))

print(s2)


def func2(x):

? ? return (x.isdigit() ,x.isupper(),x.isdigit() and int(x) % 2 == 0,x)

print("".join(sorted(s, key=func2)))

#a -->(False, False,False,'a')

#s -->(False, False, False,'s')

#2 -->(True, True, False,2)

#3 -->(True,False,False,3)

#G -->(False,False, True,"G")

免費(fèi)領(lǐng)取碼同學(xué)軟件測試課程筆記+超多學(xué)習(xí)資料+學(xué)習(xí)完整視頻 ? 可加:Matongxue_8/關(guān)注碼同學(xué)公眾號:自動化軟件測試

本文著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。


Python四種常用的高階函數(shù),你會用了嗎的評論 (共 條)

分享到微博請遵守國家法律
湾仔区| 拉萨市| 岳西县| 绵阳市| 新昌县| 宁城县| 从化市| 舒兰市| 广饶县| 鸡东县| 鹤山市| 林芝县| 河池市| 仪征市| 青铜峡市| 扬州市| 东兰县| 调兵山市| 建宁县| 屏东市| 维西| 山东| 张家口市| 开江县| 和龙市| 七台河市| 邻水| 秭归县| 临澧县| 上蔡县| 东乡族自治县| 穆棱市| 云龙县| 龙陵县| 囊谦县| 肇庆市| 彭山县| 托克托县| 庆城县| 革吉县| 土默特左旗|