在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

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

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

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

    高階函數(shù)概念

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

    舉個例子

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

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

    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 等語言,我們很多常用的高階函數(shù)基本都一致。在開發(fā)中我們經(jīng)常使用的最基本的高階函數(shù)其實就幾個,而我們也可以基于這些函數(shù)去進行適當(dāng)?shù)臄U展,那么下面開始介紹幾種常用的高階函數(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ù)對指定序列做映射, 并返回映射后的序列,定義:

    map(func, *iterables) –> map object

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

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

    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 類 ,而前者直接返回一個列表。

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

    # 使用匿名函數(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]# 傳入多個序列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.

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

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

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

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

    簡單舉個例子:

    # 注意,現(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] 通過匿名函數(shù)進行了累加。

    設(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ù)用來過濾序列中不符合條件的值,返回一個迭代器,該迭代器生成那些函數(shù)(項)為 true 的 iterable 項。如果函數(shù)為 None,則返回為 true 的項。定義如下:

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

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

    舉個例子:

    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ù)默認將序列升序排列后返回一個新的新的 list,還可以自定義鍵函數(shù)來進行排序,也可以設(shè)置 reverse 參數(shù)確定是升序還是降序,如果 reverse = True 則為降序。函數(shù)定義如下:

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

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

    舉個簡單的例子:

    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]# 默認升序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),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年6月27日 22:36
    下一篇 2022年6月27日 22:36

    相關(guān)推薦

    • 存儲過程語法(sql server存儲過程語法)

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

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

      原神3.2無相交響詩第一天無相之冰怎么打?最近新版本3.2版本的無相交響詩活動又開啟了,不少玩家還不清楚具體的玩法,下面一起來看一下原神被隱去的原神3.2無相交響詩第一天無相之冰打…

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

      直播帶貨無論是對于商家來說還是主播收益都是非??捎^的,所以不少平臺都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開通后帶貨鏈接怎么做?下面小編為大家?guī)硖詫氈辈ラ_通后帶…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      2022年11月22日

    聯(lián)系我們

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