免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      Python 大家都該知道的高階函數(shù)

      函數(shù)式編程現(xiàn)在逐漸被廣大開(kāi)發(fā)群體接受,越來(lái)越多的開(kāi)發(fā)者們開(kāi)始使用這種優(yōu)雅的開(kāi)發(fā)模式,而我們使用函數(shù)式編程最主要的是需要清楚:

      • 什么是高階函數(shù)(Higher-order Functions)?
      • Python 中高階函數(shù)有哪些?要怎么用?

      高階函數(shù)概念

      在函數(shù)式編程中,我們可以將函數(shù)當(dāng)作變量一樣自由使用。一個(gè)函數(shù)接收另一個(gè)函數(shù)作為參數(shù),這種函數(shù)稱之為高階函數(shù)。

      舉個(gè)例子

      def high_func(f, arr): return [f(x) for x in arr]

      上面的例子中, high_func 就是一個(gè)高階函數(shù)。其中第一個(gè)參數(shù) f 是一個(gè)函數(shù),第二個(gè)參數(shù) arr 是一個(gè)數(shù)組,返回的值是數(shù)組中的所有的值在經(jīng)過(guò) f 函數(shù)計(jì)算后得到的一個(gè)列表。例如:

      from math import factorialdef high_func(f, arr): return [f(x) for x in arr]def square(n): return n ** 2# 使用python自帶數(shù)學(xué)函數(shù)print(high_func(factorial, list(range(10))))# print out: [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]# 使用自定義函數(shù)print(high_func(square, list(range(10))))# print out: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

      Python 常用高階函數(shù)

      如同 java、scala 等語(yǔ)言,我們很多常用的高階函數(shù)基本都一致。在開(kāi)發(fā)中我們經(jīng)常使用的最基本的高階函數(shù)其實(shí)就幾個(gè),而我們也可以基于這些函數(shù)去進(jìn)行適當(dāng)?shù)臄U(kuò)展,那么下面開(kāi)始介紹幾種常用的高階函數(shù)。

      map

      Make an iterator that computes the function using arguments from each of the iterables. Stops when the shortest iterable is exhausted.

      根據(jù)提供的函數(shù)對(duì)指定序列做映射, 并返回映射后的序列,定義:

      map(func, *iterables) –> map object

      • function # 序列中的每個(gè)元素需要執(zhí)行的操作, 可以是匿名函數(shù)
      • *iterables # 一個(gè)或多個(gè)序列

      正如前面所舉的例子 high_func 函數(shù), map 函數(shù)是 high_func 函數(shù)高階版,可以傳入一個(gè)函數(shù)和多個(gè)序列。

      from math import factorialdef square(n): return n ** 2# 使用python自帶數(shù)學(xué)函數(shù)facMap = map(factorial, list(range(10)))print(list(facMap))# print out: [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]# 使用自定義函數(shù)squareMap = map(square, list(range(10)))print(list(squareMap))# print out: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

      可以看到輸出了同樣的結(jié)果,只是與 python2.X 不同的是, python3.X 中返回 map 類 ,而前者直接返回一個(gè)列表。

      我們使用匿名函數(shù),也可以傳入多個(gè)序列,如下圖

      # 使用匿名函數(shù)lamMap = map(lambda x: x * 2, list(range(10)))print(list(lamMap))# print out: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]# 傳入多個(gè)序列mutiMap = map(lambda x, y: x+y, list(range(10)), list(range(11, 15)))print(list(mutiMap))# print out: [11, 13, 15, 17]

      reduce

      Apply a function of two arguments cumulatively to the items of a sequence,from left to right, so as to reduce the sequence to a single value.

      大致上來(lái)講, reduce 函數(shù)需要傳入一個(gè)有兩個(gè)參數(shù)的函數(shù),然后用這個(gè)函數(shù)從左至右順序遍歷序列并生成結(jié)果,定義如下:

      reduce(function, sequence[, initial]) -> value

      • function # 函數(shù), 序列中的每個(gè)元素需要執(zhí)行的操作, 可以是匿名函數(shù)
      • sequence # 需要執(zhí)行操作的程序列
      • initial # 可選,初始參數(shù)

      最后返回函數(shù)的計(jì)算結(jié)果, 和初始參數(shù)類型相同

      簡(jiǎn)單舉個(gè)例子:

      # 注意,現(xiàn)在 reduce() 函數(shù)已經(jīng)放入到functools包中。from functools import reduceresult = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])print(result)# print out 15

      我們可以看到,序列 [1, 2, 3, 4, 5] 通過(guò)匿名函數(shù)進(jìn)行了累加。

      設(shè)定初始值:

      # 設(shè)定初始參數(shù):s = reduce(lambda x, y: x + y, [‘1’, ‘2’, ‘3’, ‘4’, ‘5’], “數(shù)字 = “)print(s)# print out: 數(shù)字 = 12345

      需要注意的是:序列數(shù)據(jù)類型需要和初始參數(shù)一致。

      filter

      Return an iterator yielding those items of iterable for which function(item) is true. If function is None, return the items that are true.

      filter() 函數(shù)用來(lái)過(guò)濾序列中不符合條件的值,返回一個(gè)迭代器,該迭代器生成那些函數(shù)(項(xiàng))為 true 的 iterable 項(xiàng)。如果函數(shù)為 None,則返回為 true 的項(xiàng)。定義如下:

      filter(function or None, iterable) –> filter object

      • function or None # 過(guò)濾操作執(zhí)行的函數(shù)
      • iterable # 需要過(guò)濾的序列

      舉個(gè)例子:

      def boy(n): if n % 2 == 0: return True return False# 自定義函數(shù)filterList = filter(boy, list(range(20)))print(list(filterList))# print out: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]# 自定義函數(shù)filterList2 = filter(lambda n: n % 2 == 0, list(range(20)))print(list(filterList2))# print out: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

      上面我們可以看到,列表中不能被 2 整除的數(shù)據(jù)都被排除了。

      sorted

      Return a new list containing all items from the iterable in ascending order.

      A custom key function can be supplied to customize the sort order, and the reverse flag can be set to request the result in descending order.

      sorted 函數(shù)默認(rèn)將序列升序排列后返回一個(gè)新的新的 list,還可以自定義鍵函數(shù)來(lái)進(jìn)行排序,也可以設(shè)置 reverse 參數(shù)確定是升序還是降序,如果 reverse = True 則為降序。函數(shù)定義如下:

      def sorted(iterable: Iterable[_T], *, key: Optional[Callable[[_T], Any]] = …, reverse: bool = …) -> List[_T]: …

      • iterable # 序列
      • key # 可以用來(lái)計(jì)算的排序函數(shù)。
      • reverse # 排序規(guī)則,reverse = True 降序,reverse = False 升序(默認(rèn))。

      舉個(gè)簡(jiǎn)單的例子:

      list01 = [5, -1, 3, 6, -7, 8, -11, 2]list02 = [‘apple’, ‘pig’, ‘monkey’, ‘money’]print(sorted(list01))# print out: [-11, -7, -1, 2, 3, 5, 6, 8]print(sorted(list01, key=abs))# print out: [-1, 2, 3, 5, 6, -7, 8, -11]# 默認(rèn)升序print(sorted(list02))# print out: [‘apple’, ‘money’, ‘monkey’, ‘pig’]# 降序print(sorted(list02, reverse=True))# print out: [‘pig’, ‘monkey’, ‘money’, ‘apple’]# 匿名函數(shù)排序print(sorted(list02, key=lambda x: len(x), reverse=True))# print out: [‘monkey’, ‘apple’, ‘money’, ‘pig’]

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
      用戶投稿
      上一篇 2022年6月27日 22:36
      下一篇 2022年6月27日 22:36

      相關(guān)推薦

      • 存儲(chǔ)過(guò)程語(yǔ)法(sql server存儲(chǔ)過(guò)程語(yǔ)法)

        今天小編給各位分享存儲(chǔ)過(guò)程語(yǔ)法的知識(shí),其中也會(huì)對(duì)sql server存儲(chǔ)過(guò)程語(yǔ)法進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧! oracle存儲(chǔ)過(guò)程基本語(yǔ)法…

        2022年11月26日
      • 《原神》3.2無(wú)相交響詩(shī)第一天無(wú)相之冰怎么打?無(wú)相交響詩(shī)攻略

        原神3.2無(wú)相交響詩(shī)第一天無(wú)相之冰怎么打?最近新版本3.2版本的無(wú)相交響詩(shī)活動(dòng)又開(kāi)啟了,不少玩家還不清楚具體的玩法,下面一起來(lái)看一下原神被隱去的原神3.2無(wú)相交響詩(shī)第一天無(wú)相之冰打…

        2022年11月24日
      • 淘寶直播開(kāi)通后帶貨鏈接怎么做(淘寶直播需要開(kāi)通淘寶店鋪嗎)

        直播帶貨無(wú)論是對(duì)于商家來(lái)說(shuō)還是主播收益都是非??捎^的,所以不少平臺(tái)都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開(kāi)通后帶貨鏈接怎么做?下面小編為大家?guī)?lái)淘寶直播開(kāi)通后帶…

        2022年11月24日
      • 銳龍97900x參數(shù)規(guī)格跑分評(píng)測(cè) 銳龍97900x屬于什么檔次

        銳龍9 7900X是銳龍7000系列處理器中性能頂尖的型號(hào)之一,它采用了這一代標(biāo)配的zen4架構(gòu)和5nm制程工藝,那么它具體的參數(shù)跑分如何,在電腦上世紀(jì)發(fā)揮怎么樣呢,下面就來(lái)看看銳…

        2022年11月24日
      • 1千克等于多少磅

        克,此定義在1958年被美國(guó)以及其他英聯(lián)邦會(huì)員國(guó)承認(rèn)換算回來(lái),一千克等于262磅,一磅等于037千克英國(guó)在1963年開(kāi)始,依據(jù)度量衡法案的規(guī);1 磅=16 盎司=04536 千克 …

        2022年11月24日
      • 《原神》畫(huà)外旅照青植之篇第七天怎么過(guò)?畫(huà)外旅照第七天玩法介紹

        原神的畫(huà)外旅照任務(wù)需要玩家達(dá)成一定的要求進(jìn)行拍照,完成任務(wù)可以獲得獎(jiǎng)勵(lì)。很多玩家想知道原神畫(huà)外旅照青植之篇第七天怎么過(guò),下面就帶來(lái)原神畫(huà)外旅照第七天玩法介紹,感興趣的小伙伴不要錯(cuò)過(guò)…

        2022年11月23日
      • vivox90pro配置參數(shù)跑分詳情 vivox90pro是什么屏幕

        vivox90pro參數(shù)配置詳情怎么樣?vivo手機(jī)在昨晚舉行了X90系列發(fā)布會(huì),有普通款、pro款以及pro+款三個(gè)版本,那么vivox90pro具體配置怎么樣呢?下面就讓小編為…

        2022年11月23日
      • vivox90參數(shù)配置詳情 vivox90處理器功耗跑分介紹

        vivox90參數(shù)配置詳情怎么樣?vivo手機(jī)在昨晚舉行了X90系列發(fā)布會(huì),有普通款、pro款以及pro+款三個(gè)版本,那么vivox90具體配置怎么樣呢?下面就讓小編為大家介紹一下…

        2022年11月23日
      • 快手限流多久能解除(快手限流什么意思)

        我相信很多人都看中了快手平臺(tái)的商機(jī),都爭(zhēng)先恐后地想要搶占機(jī)會(huì),可一些人剛剛作出一點(diǎn)成績(jī),就被降權(quán)了,自己也不知道什么原因。所以今天就來(lái)聊聊快手賬號(hào)降權(quán)操作分享,趕快來(lái)看看避免違規(guī)!…

        2022年11月23日
      • Win11 22H2再出新問(wèn)題Bug:無(wú)法彈出USB設(shè)備

        作為Windows 11的首次大更新,在Win11 22H2發(fā)布后并沒(méi)有帶來(lái)預(yù)想的場(chǎng)景,各種問(wèn)題頻現(xiàn)成為了一種常態(tài)。 近日有消息稱,Win11 22H2存在一個(gè)占用沖突Bug,當(dāng)用…

        2022年11月22日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息