最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Python中高階函數(shù)(map,filter,reduce,sorted)的使用

 更新時(shí)間:2022年04月25日 09:44:56   作者:小小垂髫  
高階函數(shù)就是能夠把函數(shù)當(dāng)成參數(shù)傳遞的函數(shù)就是高階函數(shù),換句話(huà)說(shuō)如果一個(gè)函數(shù)的參數(shù)是函數(shù),那么這個(gè)函數(shù)就是一個(gè)高階函數(shù)。本文為大家詳細(xì)講解了Python中常用的四個(gè)高階函數(shù),感興趣的可以了解一下

什么是高階函數(shù)

高階函數(shù)就是能夠把函數(shù)當(dāng)成參數(shù)傳遞的函數(shù)就是高階函數(shù),換句話(huà)說(shuō)如果一個(gè)函數(shù)的參數(shù)是函數(shù),那么這個(gè)函數(shù)就是一個(gè)高階函數(shù)。

高階函數(shù)可以是你使用def關(guān)鍵字自定義的函數(shù),也有Python系統(tǒng)自帶的內(nèi)置高階函數(shù)。

自定義一個(gè)高階函數(shù)

我們下面的例子中,函數(shù) senior 的參數(shù)中有一個(gè)是函數(shù),那么senior就是一個(gè)高階函數(shù);函數(shù) tenfold 的參數(shù)不是函數(shù),所以tenfold就只是一個(gè)普通的函數(shù)。

# 定義高階函數(shù)
def senior(func, container):
   """
   將容器中的數(shù)據(jù)依次放入函數(shù)中進(jìn)行運(yùn)算,
   將結(jié)果返回到迭代器中,最后返回迭代器。
   """
   lst = list()
   for i in container:
      lst.append(func(i))
   return iter(lst)


# 定義普通的功能函數(shù)
def tenfold(num):
   """
   十倍器
   將數(shù)據(jù)乘 10,返回結(jié)果。
   """
   return num * 10


# 定義一個(gè)列表
lst = [10, 20666, 'msr']

# 使用高階函數(shù)
it = senior(tenfold, lst)
print(list(it)) # [100, 206660, 'msrmsrmsrmsrmsrmsrmsrmsrmsrmsr']

常用的內(nèi)置高階函數(shù)

函數(shù)功能作用
map處理可迭代對(duì)象中的數(shù)據(jù),將處理的結(jié)果返回到迭代器中。
filter過(guò)濾可迭代對(duì)象中的數(shù)據(jù),將過(guò)濾好的數(shù)據(jù)返回到迭代器中。
reduce處理可迭代對(duì)象中的數(shù)據(jù),將最終的結(jié)果返回出來(lái)。
sorted排序可迭代對(duì)象中的數(shù)據(jù),將排序好的結(jié)果返回出來(lái)。

map函數(shù)

語(yǔ)法:map(function, Iterable)

參數(shù)說(shuō)明

function:函數(shù),可以是 自定義函數(shù) 或者是 內(nèi)置函數(shù);

iterable:可迭代對(duì)象,可迭代性數(shù)據(jù)。(容器類(lèi)型數(shù)據(jù)和類(lèi)容器類(lèi)型數(shù)據(jù)、range對(duì)象、迭代器)

功能

把可迭代對(duì)象中的數(shù)據(jù)一個(gè)一個(gè)拿出來(lái),然后放在到指定的函數(shù)中做處理,將處理之后的結(jié)果依次放入迭代器中,最后返回這個(gè)迭代器。

實(shí)例

將列表中的元素轉(zhuǎn)成整型類(lèi)型,然后返回出來(lái)。

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

""" 使用常規(guī)的寫(xiě)法 """
new_lst = list()
for i in lst:
    new_lst.append(int(i))
print(new_lst)  # [1, 2, 3, 4]


""" 使用map函數(shù)實(shí)現(xiàn) """
it = map(int, lst)
new_lst = list(it)
print(new_lst)  # [1, 2, 3, 4]

列表中的每一個(gè)數(shù)依次乘 2的下標(biāo)索引+1 次方。使用自定義的函數(shù),配合實(shí)現(xiàn)功能。

lst = [1, 2, 3, 4]

""" 普通的方法,利用左移 """
new_lst = list()
for i in lst:
	res = i << i
	new_lst.append(res)
print(new_lst)  # [2, 8, 24, 64]


""" 使用map函數(shù) """
# 先定義一個(gè)左移函數(shù),自定義的函數(shù)必須是一個(gè)帶參函數(shù)并且有返回值
def func(num):
	return num << num
new_lst = list(map(func, lst))
print(new_lst)  # [2, 8, 24, 64]


""" 使用lambda簡(jiǎn)化 """
new_lst = list(map(lambda num: num << num, lst))
print(new_lst)  # [2, 8, 24, 64]

filter函數(shù)

語(yǔ)法:filter(function, iterable)

參數(shù)的意義和map函數(shù)一樣

功能

filter用于過(guò)濾數(shù)據(jù),將可迭代對(duì)象中的數(shù)據(jù)一個(gè)一個(gè)的放入函數(shù)中進(jìn)行處理,如果函數(shù)返回值為真,將數(shù)據(jù)保留;反之不保留,最好返回迭代器。

實(shí)例

保留容器中的偶數(shù)

lst = [11, 2, 3, 34, 4, 4, 55]

""" 常規(guī)寫(xiě)法 """
new_lst = list()
for i in lst:
   if i % 2 == 0:
      new_lst.append(i)
print(new_lst)  # [2, 34, 4, 4]


""" 使用filter函數(shù) """
def func(num):
   if num % 2 == 0:
      return True
new_lst = list(filter(func, lst))
print(new_lst)  # [2, 34, 4, 4]


""" filter + lambda """
new_lst = list(filter(lambda num: True if (num % 2 == 0) else False, lst))
print(new_lst)  # [2, 34, 4, 4]

reduce函數(shù)

語(yǔ)法:reduce(function, iterable)

參數(shù)含義與map、filter一致。

功能

計(jì)算數(shù)據(jù),將可迭代對(duì)象的中的前兩個(gè)值放在函數(shù)中做出運(yùn)算,得出結(jié)果在和第三個(gè)值放在函數(shù)中運(yùn)算得出結(jié)果,以此類(lèi)推,直到所有的結(jié)果運(yùn)算完畢,返回最終的結(jié)果。

根據(jù)功能我們就應(yīng)該直到,reduce中的函數(shù)需要可以接收兩個(gè)參數(shù)才可以。

實(shí)例

reduce函數(shù)使用需要先從標(biāo)準(zhǔn)庫(kù)functools中導(dǎo)入

將列表中的數(shù)據(jù)元素組合成為一個(gè)數(shù),

from functools import reduce

lst = [2, 0, 6, 6, 6]


""" 常規(guī)方法 """
char = str()
for i in lst:
   char += str(i)
print(int(char))    # 20666


""" 使用reduse函數(shù) """
def func(x, y):
   return x * 10 + y
res = reduce(func, lst)
print(res)  # 20666


""" reduce + lambda """
res = reduce((lambda x, y: (x * 10 + y)), lst)
print(res)  # 20666

sorted函數(shù)

語(yǔ)法:sorted(Iterable, key=function, reverse=False)

參數(shù)說(shuō)明

iterable:可迭代對(duì)象;

key:指定函數(shù),默認(rèn)為空;

reverse:排序的方法,默認(rèn)為False,意為升序;

功能

如果沒(méi)有指定函數(shù),就單純的將數(shù)據(jù)安札ASCII進(jìn)行排序;如果指定了函數(shù),就將數(shù)據(jù)放入函數(shù)中進(jìn)行運(yùn)算,根據(jù)數(shù)據(jù)的結(jié)果進(jìn)行排序,返回新的數(shù)據(jù),不會(huì)改變?cè)械臄?shù)據(jù)。

注意,如果指定了函數(shù),排序之后是根據(jù)數(shù)據(jù)的結(jié)果對(duì)原數(shù)據(jù)進(jìn)行排序,而不是排序計(jì)算之后的就結(jié)果數(shù)據(jù)。

實(shí)例

將列表中的數(shù)據(jù)進(jìn)行排序。

lst = [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]

""" 使用列表的內(nèi)置函數(shù)進(jìn)行排序,默認(rèn)升序 """
lst.sort()
print(lst)  # [-3, 1, 5, 6, 12, 12, 23, 34, 342, 2345]
# 降序排序
lst.sort(reverse=True)
print(lst)  # [2345, 342, 34, 23, 12, 12, 6, 5, 1, -3]


lst = [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]
""" 使用sorted進(jìn)行排序 """
new_lst = sorted(lst)
print(new_lst)  # [-3, 1, 5, 6, 12, 12, 23, 34, 342, 2345]
print(lst)      # [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]

還有一點(diǎn)就是 sorted 函數(shù)可以將數(shù)據(jù)放入函數(shù)中進(jìn)行處理,然后根據(jù)結(jié)果進(jìn)行排序。

lst = [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]

""" 按照絕對(duì)值進(jìn)行排序 """
new_lst = sorted(lst, key=abs)
print(new_lst)  # [1, -3, 5, 6, 12, 12, 23, 34, 342, 2345]


""" 按照除以10的余數(shù)進(jìn)行排序 """
def func(num):
   return num % 10
new_lst = sorted(lst, key=func)
print(new_lst)  # [1, 342, 12, 12, 23, 34, 5, 2345, 6, -3]

# 可以看到,我們指定函數(shù)之后排序的結(jié)果既不是原數(shù)據(jù)的絕對(duì)值、也不是原數(shù)據(jù)除以10的余數(shù),而是根據(jù)這兩種計(jì)算結(jié)果對(duì)原數(shù)據(jù)進(jìn)行了排序。

sort和sorted

既然有了列表的內(nèi)置函數(shù)sort,為什么我們還要使用sorted函數(shù)呢?

  • sorted可以排序一切可迭代對(duì)象,但是sort只是列表的內(nèi)置函數(shù),只能對(duì)列表進(jìn)行排序;
  • sorted排序返回新的數(shù)據(jù),不改變?cè)瓟?shù)據(jù),sort改變了原數(shù)據(jù);
  • sorted可以指定函數(shù),根據(jù)函數(shù)的計(jì)算結(jié)果、按照某一種方式進(jìn)行排序,但是sort只能單純的根據(jù)數(shù)字大小和ASCII進(jìn)行排序。

總結(jié)

高階函數(shù)就是將函數(shù)作為參數(shù)的函數(shù)。

map(Function,Iterable)(將可迭代性數(shù)據(jù)中的元素一一取出放入函數(shù)中進(jìn)行運(yùn)算在將結(jié)果返回,最后返回的數(shù)據(jù)類(lèi)型是迭代器)

filter(Function,Iterable)(過(guò)濾數(shù)據(jù),將可迭代性數(shù)據(jù)放入函數(shù)中進(jìn)行運(yùn)算,結(jié)果為真將數(shù)據(jù)返回,反之舍棄,最會(huì)返回的數(shù)據(jù)類(lèi)型是迭代器)

reduce(Function,Iterable)(計(jì)算數(shù)據(jù),將可迭代型數(shù)據(jù)中的前兩個(gè)元素拿出放入函數(shù)中進(jìn)行運(yùn)算將結(jié)果在與后一個(gè)元素進(jìn)行運(yùn)算,最后返回最終的結(jié)果)

sorted(Iterable,[key=Function],[reverse =Bool(False(default)/True)])(將可迭代型數(shù)據(jù)進(jìn)行排序,或?qū)⒖傻蛿?shù)據(jù)放入函數(shù)中進(jìn)行運(yùn)算將結(jié)果進(jìn)行排序返回)

以上就是詳解Python中高階函數(shù)(map,filter,reduce,sorted)的使用的詳細(xì)內(nèi)容,更多關(guān)于Python高階函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • keras訓(xùn)練淺層卷積網(wǎng)絡(luò)并保存和加載模型實(shí)例

    keras訓(xùn)練淺層卷積網(wǎng)絡(luò)并保存和加載模型實(shí)例

    這篇文章主要介紹了keras訓(xùn)練淺層卷積網(wǎng)絡(luò)并保存和加載模型實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • Python對(duì)列表去重的多種方法(四種方法)

    Python對(duì)列表去重的多種方法(四種方法)

    開(kāi)發(fā)中對(duì)數(shù)組、列表去重是非常常見(jiàn)的需求,對(duì)一個(gè)list中的id進(jìn)行去重,有下面幾種方法,具體內(nèi)容詳情大家參考下本文
    2017-12-12
  • python 階乘累加和的實(shí)例

    python 階乘累加和的實(shí)例

    今天小編就為大家分享一篇python 階乘累加和的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • python如何禁用print輸出

    python如何禁用print輸出

    這篇文章主要介紹了python如何禁用print輸出問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python中l(wèi)ower函數(shù)實(shí)現(xiàn)方法及用法講解

    python中l(wèi)ower函數(shù)實(shí)現(xiàn)方法及用法講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python中l(wèi)ower函數(shù)實(shí)現(xiàn)方法及用法講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • Python生成字符視頻的實(shí)現(xiàn)示例

    Python生成字符視頻的實(shí)現(xiàn)示例

    在之前也寫(xiě)過(guò)生成字符視頻的文章,但是使用的是命令行窗口輸出,效果不是很好,而且存在卡頓的情況,所以本文介紹了mp4的字符視頻,感興趣的可以了解一下
    2021-05-05
  • python庫(kù)sklearn常用操作

    python庫(kù)sklearn常用操作

    sklearn是一個(gè)無(wú)論對(duì)于機(jī)器學(xué)習(xí)還是深度學(xué)習(xí)都必不可少的重要的庫(kù),里面包含了關(guān)于機(jī)器學(xué)習(xí)的幾乎所有需要的功能,本文不會(huì)先整體介紹sklearn庫(kù),而是先從sklearn庫(kù)中的一些具體實(shí)例入手,感興趣的朋友一起看看吧
    2021-08-08
  • Python多線(xiàn)程結(jié)合隊(duì)列下載百度音樂(lè)的方法

    Python多線(xiàn)程結(jié)合隊(duì)列下載百度音樂(lè)的方法

    這篇文章主要介紹了Python多線(xiàn)程結(jié)合隊(duì)列下載百度音樂(lè)的方法,實(shí)例分析了Python多線(xiàn)程及文件下載的相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • python 怎樣進(jìn)行內(nèi)存管理

    python 怎樣進(jìn)行內(nèi)存管理

    這篇文章主要介紹了python 是如何進(jìn)行內(nèi)存管理的,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • python實(shí)現(xiàn)同級(jí)目錄調(diào)用的示例詳解

    python實(shí)現(xiàn)同級(jí)目錄調(diào)用的示例詳解

    同級(jí)目錄指的是位于同一級(jí)別的文件夾,這些文件夾具有相同的層級(jí)結(jié)構(gòu),它們相互平行,沒(méi)有一個(gè)被包含在另一個(gè)之中,本文將給大家介紹python實(shí)現(xiàn)同級(jí)目錄調(diào)用的示例,需要的朋友可以參考下
    2024-06-06

最新評(píng)論

榕江县| 会宁县| 修武县| 穆棱市| 马公市| 平昌县| 南涧| 漯河市| 凤凰县| 同仁县| 安康市| 华亭县| 鄂托克前旗| 咸阳市| 南皮县| 遂昌县| 康保县| 中江县| 神池县| 白河县| 玉田县| 贡觉县| 疏附县| 乐至县| 海门市| 石嘴山市| 洛隆县| 淮阳县| 旌德县| 方山县| 承德市| 石棉县| 黑河市| 剑河县| 怀宁县| 杂多县| 鱼台县| 潮安县| 龙州县| 莱芜市| 改则县|