若何更文雅书写Python代码?那几招很香!

3个月前 (11-21 18:46)阅读3回复0
wly
wly
  • 管理员
  • 注册排名8
  • 经验值131390
  • 级别管理员
  • 主题26278
  • 回复0
楼主

1 简介

各人好我是费教师,一些比力熟悉 pandas 的读者伴侣应该经常会利用 query 、 eval 、 pipe 、 assign 等 pandas 的常用办法(相关常识详见我的 pandas 专题教程 / ),书写可读性很高的 「链式」数据阐发处置代码,从而愈加丝滑顺畅地组织代码逻辑。

但在原生 Python 中并没有供给类似 shell 中的管道操做符 | 、 R 中的管道操做符 %% 等语法,也没有针对列表等数组构造的可停止链式书写的灵敏办法,譬如 java 中数组的 map 、 filter 、 some 、 every 等。

正所谓“原则库不敷,三方库来凑”, Python 原生对链式写法撑持不到位不妨,我们能够利用一些简双方便且轻量的第三方库来协助我们在 Python 代码中大面积实现链式写法,今天的文章中费教师我就将带各人一路进修相关的常识身手~

2 在Python中共同pipe乖巧利用链式写法

我们将利用到 pipe 那个第三方库,它不只内置了良多适用的 「管道操做函数」,还供给了将常规函数灵敏 「转换」为管道操做函数的办法,利用 pip install pipe 对其停止安拆即可。

pipe 的用法十分便利,类似 shell 中的管道操做:以你的数组变量为起点,利用操做符 | 跟尾 pipe 内置的各个常见管道操做函数,组拆起本身所需的计算步调即可,譬如,我们挑选输进数组中为偶数的,再求平方,就能够写做:

importpipe

list(

range( 10) |

pipe.filter( lambdax: x % 2== 0) |

pipe.select( lambdax: x ** 2)

因为 pipe 搭建的管道默认都是惰性运算的,间接产生的成果是生成器类型,所以上面的例子中我们最外层套上了 list 来获得现实计算成果,更文雅的体例是共同 pipe.Pipe ,将 list 也革新为管道操做函数:

frompipe importPipe

range( 10) |

pipe.filter( lambdax: x % 2== 0) |

pipe.select( lambdax: x ** 2) |

Pipe(list)

在上面的简单例子中我们利用到的 filter 、 select 等就是 pipe 中常见的管道操做函数,事实上 pipe 中的管道操做函数相当的丰富,下面我们来展现此中一些常用的:

2.1 pipe中常用的管道操做函数2.1.1 利用traverse展平嵌套数组

假设你想要将肆意嵌套数组构造展平,能够利用 traverse :

[ 1, [ 2, 3, [ 4, 5]], 6, [ 7, 8, [ 9, [ 10, 11]]]] |

pipe.traverse |

Pipe(list)

2.1.2 利用dedup停止挨次往重

假设我们需要对包罗若干反复值的数组停止往重,且期看保留原始数据的挨次,则能够利用 dedup ,其还撑持 key 参数,类似 sorted 中的同名参数,实现自定义往重规则:

[ -1, 0, 0, 0, 1, 2, 3] |

pipe.dedup |

Pipe(list)

[ -1, 0, 0, 0, 1, 2, 3] |

# 基于每个元素的绝对值停止往重

pipe.dedup(key=abs) |

Pipe(list)

2.1.3 利用filter停止值过滤

我们最起头的例子中利用过它,用法就是基于传进的 lambda 函数对每个元素停止前提揣度,并保留成果为 True 的,与 java 中的 filter 办法十分类似:

[ 1, 4, 3, 2, 5, 6, 8] |

# 保留大于5的元素

pipe.filter( lambdax: x 5) |

Pipe(list)

2.1.4 利用groupby停止分组运算

那个函数十分适用,其功用相当于管道操做版本的 itertools.groupby ,能够搀扶帮助我们基于 lambda 函数运算成果对原始输进数组停止分组,通过 groupby 操做后间接得到的成果是分组成果的二元组列表,每个元组的第一个元素是分组标签,第二个元素是分到该组内的各个元素:

基于此,我们能够跟尾良多其他管道操做函数,譬如跟尾 select 对分组成果停止自定义运算:

2.1.5 利用select对上一步成果停止自定义遍历运算

那个函数是 pipe 中核心的管道操做函数,通过前面的若干例子也能弄大白,它的功用是基于我们自定义的函数,对上一步的运算成果停止遍历运算。

2.1.6 利用sort停止排序

相当于内置函数 sorted 的管道操做版本,同样撑持 key 、 reverse 参数:

上述内容足以支持大部门日常操做需求,你也能够在 的更多功用介绍。

以上就是本文的全数内容,欢送在评论区与我停止讨论~

进门: 最全的零根底学Python的问题 | 零根底学了8个月的Python |实战项目 | 学Python就是那条捷径

干货:爬取豆瓣短评,片子《后来的我们》 | 38年NBA更佳球员阐发 |从万寡等待到口碑扑街!唐探3令人失看 | 笑看新倚天屠龙记 | 灯谜答题王 | 用Python做个海量蜜斯姐素描图 | 碟中谍那么火,我用机器进修做个迷你选举系统片子

兴趣:弹球游戏 | 九宫格 | 标致的花 | 两百行Python《天天酷跑》游戏!

AI:会做诗的机器人 | 给图片上色 | 揣测收进 | 碟中谍那么火,我用机器进修做个迷你选举系统片子

小东西: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保留为pdf! |再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 造造一款钉钉低价机票提醒器! |60行代码做了一个语音壁纸切换器天天看蜜斯姐! |

年度爆款案牍

1). 卧槽!Pdf转Word用Python轻松搞定 !

2).学Python实香!我用100行代码做了个网站,帮人PS游览图片,赚个鸡腿食

3).首播过亿,火爆全网,我阐发了《披荆斩棘的姐姐》,发现了那些奥秘

4). 80行代码!用Python做一个哆来A梦分身

5).你必需掌握的20个python代码,短小精悍,用途无限

6). 30个Python奇淫身手集

7). 我总结的80页《菜鸟学Python精选干货.pdf》,都是干货

8). 再见Python!我要学Go了!2500字深度阐发 !

9).发现一个舔狗福利!那个Python爬虫神器太爽了,主动下载妹子图片

0
回帖

若何更文雅书写Python代码?那几招很香! 期待您的回复!

取消