欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

書寫Python代碼的一種更優(yōu)雅方式(推薦!)

 更新時(shí)間:2022年10月21日 11:47:55   作者:今天代碼沒(méi)bug  
Python是一個(gè)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言,下面這篇文章主要給大家介紹了關(guān)于書寫Python代碼的一種更優(yōu)雅方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

1 簡(jiǎn)介

一些比較熟悉pandas的讀者朋友應(yīng)該經(jīng)常會(huì)使用query()、eval()、pipe()assign()pandas的常用方法,書寫可讀性很高的「鏈?zhǔn)健?/strong>數(shù)據(jù)分析處理代碼,從而更加絲滑流暢地組織代碼邏輯。

但在原生Python中并沒(méi)有提供類似shell中的管道操作符|、R中的管道操作符%>%等語(yǔ)法,也沒(méi)有針對(duì)列表等數(shù)組結(jié)構(gòu)的可進(jìn)行鏈?zhǔn)綍鴮懙目旖莘椒ǎ┤?code>javascript中數(shù)組的map()、filter()、some()、every()等。

正所謂“標(biāo)準(zhǔn)庫(kù)不夠,三方庫(kù)來(lái)湊”,Python原生對(duì)鏈?zhǔn)綄懛ㄖС植坏轿粵](méi)關(guān)系,我們可以使用一些簡(jiǎn)單方便且輕量的第三方庫(kù)來(lái)協(xié)助我們?cè)?code>Python代碼中大面積實(shí)現(xiàn)鏈?zhǔn)綄懛?,今天的文章中我就將帶大家一起學(xué)習(xí)相關(guān)的知識(shí)技巧~

2 在Python中配合pipe靈活使用鏈?zhǔn)綄懛?/h2>

我們將使用到pipe這個(gè)第三方庫(kù),它不僅內(nèi)置了很多實(shí)用的「管道操作函數(shù)」,還提供了將常規(guī)函數(shù)快捷「轉(zhuǎn)換」為管道操作函數(shù)的方法,使用pip install pipe對(duì)其進(jìn)行安裝即可。

pipe的用法非常方便,類似shell中的管道操作:以你的數(shù)組變量為起點(diǎn),使用操作符|銜接pipe內(nèi)置的各個(gè)常見(jiàn)管道操作函數(shù),組裝起自己所需的計(jì)算步驟即可,譬如,我們篩選輸入數(shù)組中為偶數(shù)的,再求平方,就可以寫作:

import pipe
 
list(
    range(10) | 
    pipe.filter(lambda x: x % 2 == 0) | 
    pipe.select(lambda x: x ** 2)
)

因?yàn)?code>pipe搭建的管道默認(rèn)都是惰性運(yùn)算的,直接產(chǎn)生的結(jié)果是生成器類型,所以上面的例子中我們最外層套上了list()來(lái)取得實(shí)際計(jì)算結(jié)果,更優(yōu)雅的方式是配合pipe.Pipe(),將list()也改造為管道操作函數(shù):

from pipe import Pipe
 
(
    range(10) | 
    pipe.filter(lambda x: x % 2 == 0) | 
    pipe.select(lambda x: x ** 2) |
    Pipe(list)
)

在上面的簡(jiǎn)單例子中我們使用到的filter()、select()等就是pipe中常見(jiàn)的管道操作函數(shù),事實(shí)上pipe中的管道操作函數(shù)相當(dāng)?shù)呢S富,下面我們來(lái)展示其中一些常用的:

2.1 pipe中常用的管道操作函數(shù)

2.1.1 使用traverse()展平嵌套數(shù)組

如果你想要將任意嵌套數(shù)組結(jié)構(gòu)展平,可以使用traverse()

(
    [1, [2, 3, [4, 5]], 6, [7, 8, [9, [10, 11]]]] | 
    pipe.traverse | 
    Pipe(list)
)

2.1.2 使用dedup()進(jìn)行順序去重

如果我們需要對(duì)包含若干重復(fù)值的數(shù)組進(jìn)行去重,且希望保留原始數(shù)據(jù)的順序,則可以使用dedup(),其還支持key參數(shù),類似sorted()中的同名參數(shù),實(shí)現(xiàn)自定義去重規(guī)則:

(
    [-1, 0, 0, 0, 1, 2, 3] | 
    pipe.dedup |
    Pipe(list)
)
 
(
    [-1, 0, 0, 0, 1, 2, 3] | 
    # 基于每個(gè)元素的絕對(duì)值進(jìn)行去重
    pipe.dedup(key=abs) |
    Pipe(list)
)

2.1.3 使用filter()進(jìn)行值過(guò)濾

我們最開(kāi)始的例子中使用過(guò)它,用法就是基于傳入的lambda函數(shù)對(duì)每個(gè)元素進(jìn)行條件判斷,并保留結(jié)果為True的,與javascript中的filter()方法非常相似:

(
    [1, 4, 3, 2, 5, 6, 8] |
    # 保留大于5的元素
    pipe.filter(lambda x: x > 5) |
    Pipe(list)
)

2.1.4 使用groupby()進(jìn)行分組運(yùn)算

這個(gè)函數(shù)非常實(shí)用,其功能相當(dāng)于管道操作版本的itertools.groupby(),可以幫助我們基于lambda函數(shù)運(yùn)算結(jié)果對(duì)原始輸入數(shù)組進(jìn)行分組,通過(guò)groupby()操作后直接得到的結(jié)果是分組結(jié)果的二元組列表,每個(gè)元組的第一個(gè)元素是分組標(biāo)簽,第二個(gè)元素是分到該組內(nèi)的各個(gè)元素:

基于此,我們可以銜接很多其他管道操作函數(shù),譬如銜接select()對(duì)分組結(jié)果進(jìn)行自定義運(yùn)算:

2.1.5 使用select()對(duì)上一步結(jié)果進(jìn)行自定義遍歷運(yùn)算

這個(gè)函數(shù)是pipe()中核心的管道操作函數(shù),通過(guò)前面的若干例子也能弄明白,它的功能是基于我們自定義的函數(shù),對(duì)上一步的運(yùn)算結(jié)果進(jìn)行遍歷運(yùn)算。

2.1.6 使用sort()進(jìn)行排序

相當(dāng)于內(nèi)置函數(shù)sorted()的管道操作版本,同樣支持key、reverse參數(shù):

上述內(nèi)容足以支撐大部分日常操作需求,你也可以在https://github.com/JulienPalard/Pipe中查看pipe的更多功能介紹。

總結(jié)

到此這篇關(guān)于書寫Python代碼的一種更優(yōu)雅方式的文章就介紹到這了,更多相關(guān)Python代碼書寫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Pandas索引和選取數(shù)據(jù)方法詳解

    利用Pandas索引和選取數(shù)據(jù)方法詳解

    使用Pandas做數(shù)據(jù)分析的時(shí)候,用的最多的功能恐怕就是對(duì)于數(shù)據(jù)集的索引,選組數(shù)據(jù)子集。Pandas庫(kù)提供了很多非常實(shí)用的方法,了解并熟練使用這些方法而不是用for循環(huán)的方法將會(huì)事半功倍。在這一篇文章中,我們將著重介紹這些方法
    2021-10-10
  • 詳解Python實(shí)現(xiàn)多進(jìn)程異步事件驅(qū)動(dòng)引擎

    詳解Python實(shí)現(xiàn)多進(jìn)程異步事件驅(qū)動(dòng)引擎

    本篇文章主要介紹了詳解Python實(shí)現(xiàn)多進(jìn)程異步事件驅(qū)動(dòng)引擎,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 徹底搞懂Python字符編碼

    徹底搞懂Python字符編碼

    本篇文章帶領(lǐng)大家徹底搞懂Python字符編碼的一些知識(shí),及python字符編碼的一些基礎(chǔ)概念,需要的朋友可以參考下
    2018-01-01
  • 詳解Python中Pytest和Unittest的區(qū)別

    詳解Python中Pytest和Unittest的區(qū)別

    Pytest?和?Unittest是Python中屬于最常用的兩個(gè)測(cè)試框架。那么他們有些什么區(qū)別呢??Playwright?為什么只給了Pytest的深度支持,而不是Unittest呢?本文就來(lái)和大家詳細(xì)聊聊
    2023-03-03
  • 舉例介紹Python中的25個(gè)隱藏特性

    舉例介紹Python中的25個(gè)隱藏特性

    這篇文章主要介紹了一些Python中的隱藏特性,從stackoverflow的人氣問(wèn)題回答中整理而來(lái),主要以代碼實(shí)際解釋說(shuō)明,需要的朋友可以參考下
    2015-03-03
  • Python中的異常類型及處理方式示例詳解

    Python中的異常類型及處理方式示例詳解

    今天我們主要來(lái)了解一下 Python 中的異常類型以及它們的處理方式。說(shuō)到異常處理,我們首先要知道什么是異常。其實(shí),異常就是一類事件,當(dāng)它們發(fā)生時(shí),會(huì)影響到程序的正常執(zhí)行,具體內(nèi)容跟隨小編一起看看吧
    2021-08-08
  • 在Python函數(shù)中輸入任意數(shù)量參數(shù)的實(shí)例

    在Python函數(shù)中輸入任意數(shù)量參數(shù)的實(shí)例

    今天小編就為大家分享一篇在Python函數(shù)中輸入任意數(shù)量參數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲(chǔ)到django模型中

    python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲(chǔ)到django模型中

    這篇文章主要介紹了python利用xpath爬取網(wǎng)上數(shù)據(jù)并存儲(chǔ)到django模型中,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 淺談Python 列表字典賦值的陷阱

    淺談Python 列表字典賦值的陷阱

    今天小編就為大家分享一篇淺談Python 列表字典賦值的陷阱,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python實(shí)現(xiàn)圖片尺寸縮放腳本

    Python實(shí)現(xiàn)圖片尺寸縮放腳本

    這篇文章主要為大家分享了Python實(shí)現(xiàn)圖片尺寸縮放的小腳本,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評(píng)論