<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          這個(gè)庫(kù)堪稱(chēng)Python編程的瑞士軍刀!

          共 2573字,需瀏覽 6分鐘

           ·

          2021-02-23 10:37

          link:https://github.com/CNFeffery/DataScienceStudyNotes

          1 簡(jiǎn)介

          我們?cè)谑褂?code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;font-size: 14px;overflow-wrap: break-word;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;">Python完成日常任務(wù)時(shí),經(jīng)常會(huì)遇到一些很小的輔助性的需求,又不想花費(fèi)時(shí)間去搜索是否已有現(xiàn)成的庫(kù)實(shí)現(xiàn)了這些功能,往往則需要自己臨時(shí)編寫(xiě)一些邏輯或函數(shù)。

          而事實(shí)上已經(jīng)有勤勞偉大的開(kāi)發(fā)者編寫(xiě)了集成眾多小功能于一身的第三方庫(kù),本文要給大家介紹的funcy就是其中非常實(shí)用的一個(gè),它匯集了數(shù)量驚人的實(shí)用函數(shù)及裝飾器,幫助我們使用Python更好的踐行「函數(shù)式編程」理念。

          圖1

          2 funcy中的實(shí)用API

          funcy的設(shè)計(jì)宗旨就是匯集一系列花哨的實(shí)用函數(shù),其在不斷地迭代過(guò)程中,已經(jīng)積累下相當(dāng)多的功能,下面我們就來(lái)學(xué)習(xí)其中代表性的一些。

          使用pip install funcy完成安裝后,推薦大家按照如下方式進(jìn)行導(dǎo)入:

          import?funcy?as?fc
          • 「無(wú)限計(jì)數(shù)器」

          funcy中的count()可以生成一個(gè)可指定起點(diǎn)和步長(zhǎng)的無(wú)限迭代器,默認(rèn)參數(shù)start=0,step=1,我們可以用它來(lái)替代常規(guī)的while循環(huán)+自增變量的邏輯:

          for?i?in?fc.count():
          ????print(i,?end='\r')
          ????
          ????#?當(dāng)i大于等于1000時(shí)停止迭代,否則繼續(xù)
          ????if?i?>=?1000:
          ????????break
          • 「展平嵌套數(shù)組」

          funcy中的flatten()可以用來(lái)展平任意的嵌套數(shù)組:

          圖2
          • 「在指定數(shù)組中插空」

          funcy中的interpose()可以用來(lái)將指定元素插入到對(duì)應(yīng)數(shù)組的兩兩元素之間:

          圖3
          • 「批量刪除滿足指定條件的元素」

          funcy中有兩種從原始列表中刪除指定元素的方法,方式1是使用remove()來(lái)傳入條件判斷函數(shù)來(lái)刪除滿足條件的元素,類(lèi)似filter()的方式:

          圖4

          第二種方式是利用funcy中的without(),它可以幫我們從原始數(shù)組中排除指定的1個(gè)或多個(gè)元素,譬如下面我們把2、5、7、9排除掉:

          圖5
          • 「按照制定條件分組劃分原始數(shù)組」

          funcy中提供了group_by()函數(shù),幫助我們傳入函數(shù),作用于指定數(shù)組的每個(gè)元素上,并自動(dòng)按照返回的結(jié)果進(jìn)行分組輸出,就像下面的例子那樣:

          圖6
          • 「等長(zhǎng)度拆分?jǐn)?shù)組,丟棄末尾長(zhǎng)度不足的部分」

          funcy中的partition()幫助我們對(duì)輸入的數(shù)組做指定長(zhǎng)度的切片劃分,譬如下面的例子,我們對(duì)列表[0, 1, ..., 10]進(jìn)行長(zhǎng)度為3的切片拆分,剩余不足長(zhǎng)度3的部分就會(huì)被丟棄:

          圖7
          • 「等長(zhǎng)度拆分?jǐn)?shù)組,并保留長(zhǎng)度不足的部分」

          partition()功能相似,funcy中的chunks()會(huì)在等長(zhǎng)度拆分?jǐn)?shù)組的同時(shí),保留末尾長(zhǎng)度不足的部分單獨(dú)輸出:

          圖8
          • 「輸出相鄰成對(duì)元素二元組」

          利用funcy中的pairwise(),我們可以對(duì)輸入數(shù)組從頭開(kāi)始,將相鄰的成對(duì)元素以二元組的形式輸出:

          圖9
          • 「合并多個(gè)同類(lèi)型對(duì)象」

          利用merge(),我們可以將傳入的多個(gè)同類(lèi)型數(shù)據(jù)結(jié)構(gòu)拼成一個(gè)完整的,這在合并集合或字典時(shí)尤其受用:

          圖10
          • 「阻止函數(shù)遇到錯(cuò)誤時(shí)的常規(guī)報(bào)錯(cuò)方式」

          有些情況下我們執(zhí)行某些函數(shù)時(shí),由于某些原因?qū)е聢?bào)錯(cuò),但如果我們并不希望遇到錯(cuò)誤就中斷的話,就需要自己寫(xiě)額外的try...except...邏輯,而funcy中的silent()則可以讓這個(gè)過(guò)程變得很省事:

          圖11
          • 「阻止函數(shù)遇到指定錯(cuò)誤時(shí)的常規(guī)報(bào)錯(cuò)方式」

          上面介紹的silent()會(huì)幫助傳入函數(shù)遇到任意錯(cuò)誤時(shí)返回None,而funcy中的ignore()則賦予我們指定錯(cuò)誤類(lèi)型,以及報(bào)錯(cuò)時(shí)設(shè)定返回值的能力:

          圖12
          • 「裝飾指定函數(shù),使其記憶歷史執(zhí)行記錄值」

          下面要介紹的方法非常的實(shí)用,想象一下這樣的場(chǎng)景:你書(shū)寫(xiě)的某個(gè)函數(shù)接受輸入,然后經(jīng)過(guò)一段耗時(shí)不菲的計(jì)算過(guò)程輸出結(jié)果,但在函數(shù)實(shí)際調(diào)用過(guò)程中經(jīng)常遇到重復(fù)的傳入?yún)?shù)。

          這種時(shí)候你肯定希望自己的函數(shù)可以“記憶”下執(zhí)行過(guò)的參數(shù)與輸出結(jié)果,省得大量重復(fù)計(jì)算,而funcy中的memoize裝飾器就可以幫助我們快速改造自己的函數(shù):

          圖13

          而函數(shù)的緩存記錄可查詢,可自定義添加,也可以手動(dòng)清空:

          圖14
          • 「以標(biāo)簽:值的方式輔助debug」

          很多情況下,print()循環(huán)過(guò)程變量變化情況的debug方式雖然很粗糙,但有些時(shí)候下卻很方便,但在一些諸如「列表推導(dǎo)」等情況下卻不太方便注入print()代碼。

          而利用funcy中的tap()函數(shù),我們可以將迭代變量傳入,并填寫(xiě)對(duì)應(yīng)說(shuō)明標(biāo)簽,即可快速查看運(yùn)行過(guò)程,tap()的邏輯其實(shí)很簡(jiǎn)單,相當(dāng)于把輸入值打印一下再原封不動(dòng)地返回,但既然有現(xiàn)成的API,何樂(lè)而不為~

          圖15
          • 「約束某個(gè)函數(shù)的可執(zhí)行次數(shù)」

          有些情況下,我們希望程序中的某個(gè)函數(shù)在整個(gè)程序的生命周期中只執(zhí)行一次,譬如創(chuàng)建數(shù)據(jù)庫(kù)連接等操作時(shí),而funcy中提供的裝飾器once就可以幫助我們快速實(shí)現(xiàn)這個(gè)功能,并且保證了線程安全:

          圖16

          除了以上介紹的這些功能之外,funcy還擁有其他眾多的實(shí)用API,你可以進(jìn)入其官方文檔進(jìn)行查看( https://funcy.readthedocs.io/en/stable/ )。


          程序員GitHub,已經(jīng)正式上線

          專(zhuān)注于分享GitHub上趣味的開(kāi)源庫(kù),開(kāi)源工具,不限于Java, Python ,Go, Javascript等語(yǔ)言,歡迎關(guān)注。


          年度爆款文案


          瀏覽 62
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  男女日皮的视频 | 女人精品视频 | 亚洲黄色天堂 | 免费久久大香蕉 | 亚洲AV成人无码一区二区三区 |