<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>

          Python用了這么久,居然沒(méi)注意到這個(gè)騷操作函數(shù)

          共 2165字,需瀏覽 5分鐘

           ·

          2021-07-28 02:44


          導(dǎo)讀

          Python語(yǔ)言近年來(lái)的火熱程度自不必說(shuō),這一方面得益于其龐大的第三方庫(kù)的加持,使得其堪稱(chēng)萬(wàn)金油般的存在;另一方面也在于其簡(jiǎn)潔的語(yǔ)法和易用的函數(shù)。是的,Python語(yǔ)法之簡(jiǎn)潔和函數(shù)之豐富,使得眾多Python愛(ài)好者常常調(diào)侃一句:人生苦短,我用Python。鑒于此,今天本文就來(lái)分享一個(gè)Python中實(shí)用而又略顯騷氣的函數(shù)——partial!



          Python語(yǔ)言中的partial函數(shù)是一個(gè)高級(jí)函數(shù),當(dāng)我們提及高級(jí)函數(shù)時(shí),其背后一般隱含著的一層信息是函數(shù)式編程。說(shuō)函數(shù)式編程可能并不不是那么人盡皆知,所以這里還有必要先拓展談一談編程語(yǔ)言的范式!


          當(dāng)前,編程語(yǔ)言的主流范式可區(qū)分以下3種:

          • 面向過(guò)程

          • 面向?qū)ο?/span>

          • 函數(shù)式

          這里還要再講一講什么叫面向?qū)ο蟆?/span>面向?qū)ο螅幊陶Z(yǔ)言中實(shí)現(xiàn)的一種特殊語(yǔ)法結(jié)構(gòu)(類(lèi)),將一類(lèi)事物(嚴(yán)格來(lái)講,這里用對(duì)象object更為貼切,但此處有意避用這一詞語(yǔ))的所有屬性和方法封裝在一起,就實(shí)現(xiàn)了類(lèi)的定義。而后,通過(guò)該類(lèi)(class)的定義就可創(chuàng)建(new)出具有這些屬性和方法的若干實(shí)例,這些實(shí)例就叫做對(duì)象(object)(相當(dāng)于類(lèi)是加工廠,對(duì)象是加工廠生產(chǎn)的產(chǎn)品,所以類(lèi)是抽象的,對(duì)象是具體的)。值得補(bǔ)充說(shuō)明的是,前面提到將屬性和方法封裝成一個(gè)類(lèi)的定義,那么如何區(qū)分屬性和方法呢?以類(lèi)的經(jīng)典案例:Student類(lèi)來(lái)說(shuō),屬性就是姓名、年齡和身高體重的那些取值,方法則是學(xué)習(xí)、工作、跑步那些動(dòng)作。比如在Python中類(lèi)的屬性和方法的明顯區(qū)別是:屬性不帶小括號(hào),表示一個(gè)變量取值;方法都是帶小括號(hào)的,表示一個(gè)函數(shù),對(duì)應(yīng)一套處理邏輯。

          這才叫真正的面向?qū)ο缶幊?/span>


          理解完類(lèi)和對(duì)象的概念,那么面向?qū)ο缶幊?/span>則是指將一類(lèi)事物封裝成類(lèi),而后執(zhí)行操作和查找取值時(shí)則使用該類(lèi)創(chuàng)建的對(duì)象來(lái)完成,典型畫(huà)風(fēng)是這樣的:某對(duì)象執(zhí)行什么什么操作,某對(duì)象取什么什么屬性值,這里都是在用對(duì)象來(lái)調(diào)用方法或?qū)傩?,體現(xiàn)的思想就是面向?qū)ο蟆?/span>


          類(lèi)似地,面向過(guò)程編程呢,則是這樣的畫(huà)風(fēng):把某些變量輸入給一些函數(shù)來(lái)完成相應(yīng)操作。這里實(shí)現(xiàn)的主體顯然是函數(shù),函數(shù)不僅要調(diào)度這一過(guò)程、還要針對(duì)具體需求實(shí)現(xiàn)相應(yīng)的處理邏輯,體現(xiàn)的思想就是面向過(guò)程;

          那么函數(shù)式編程呢?則將是這樣的畫(huà)風(fēng):不僅把一些變量輸入給函數(shù)/方法,還把一些執(zhí)行特定操作的函數(shù)也一并作為輸入,并由這個(gè)函數(shù)和變量來(lái)完成預(yù)定需求,就好像數(shù)學(xué)中定義的函數(shù)那樣,指定輸入和函數(shù),得到相應(yīng)的輸出。這里的調(diào)度交給外面的函數(shù)/方法,而具體需求的處理邏輯則交由里面的函數(shù),體現(xiàn)的思想就是函數(shù)式。


          終于,該言歸正傳了,partial函數(shù)就是Python中的一個(gè)高級(jí)函數(shù),體現(xiàn)的就是函數(shù)式編程思想。那么。partial函數(shù)的功能是什么?解決了什么問(wèn)題,該如何使用?


          partial函數(shù)封裝在python的內(nèi)置庫(kù)functools中(從該庫(kù)的名字就可以推斷,這是一批關(guān)于函數(shù)的工具,但實(shí)際上并沒(méi)有太多常用的函數(shù),曾經(jīng)有一個(gè)reduce現(xiàn)在也不大提倡使用了),用于對(duì)一個(gè)函數(shù)應(yīng)用部分參數(shù)或關(guān)鍵字參數(shù),并返回一個(gè)新函數(shù)。


          實(shí)際上,所以這里partial的函數(shù)中文名叫部分應(yīng)用函數(shù),即提供函數(shù)的一部分參數(shù),從而簡(jiǎn)化其后續(xù)調(diào)用。talk is cheap, show me the code!

          def makeAnimal(type_, name, sex, friendly):    print(f"Generate an animal: type={type_}, name={name}, sex={sex}, friendly={friendly}")
          makeAnimal("狗", "二哈", "雄", True)# 輸出:Generate an animal: type=狗, name=二哈, sex=雄, friendly=True
          makeDog = partial(makeAnimal, "狗", friendly=True) # 基于makeAnimal得到部分應(yīng)用函數(shù),并分別傳入一個(gè)參數(shù)和關(guān)鍵字參數(shù)# 此時(shí)makeDog僅剩下兩個(gè)參數(shù):name, sex
          makeDog("旺財(cái)", "雌")# 輸出:Generate an animal: type=狗, name=旺財(cái), sex=雌, friendly=True


          最后簡(jiǎn)單總結(jié)一下:partial函數(shù)提供了對(duì)所接收函數(shù)的部分應(yīng)用功能,常用于對(duì)一個(gè)參數(shù)較多的函數(shù)先傳入一部分固定的參數(shù),返回一個(gè)參數(shù)相對(duì)精簡(jiǎn)的新函數(shù),從而更利于后續(xù)的調(diào)用。本質(zhì)上,該功能可通過(guò)Python中的默認(rèn)參數(shù)等來(lái)替代實(shí)現(xiàn),但對(duì)于豐富Python語(yǔ)法特性、提高代碼工程化水平,partial又何嘗不是一個(gè)更好的選擇呢?



          相關(guān)閱讀:


          瀏覽 48
          點(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>
                  sm调教视频网站 | 婷婷色五月在线 | 成人A级黄片| 久久久久久久久久久久性性 | 91丨九色丨国产 在线 |