如何更优雅书写Python代码?这几招很香!

2年前 (2022-11-12)阅读2回复1
路亚哦哦哦
路亚哦哦哦
  • 总版主
  • 注册排名7
  • 经验值281045
  • 级别网站编辑
  • 主题56209
  • 回复0
楼主

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

1 简介

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

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

正所谓“尺度库不敷,三方库来凑”, Python 原生对链式写法撑持不到位不妨,我们能够利用一些简双方便且轻量的第三方库来协助我们在 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)

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

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

frompipe importPipe

range( 10) |

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

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

Pipe(list)

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

在上面的简单例子中我们利用到的 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)

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

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)

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

2.1.3 利用filter停止值过滤

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

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

# 保留大于5的元素

pipe.filter( lambdax: x > 5) |

Pipe(list)

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

2.1.4 利用groupby停止分组运算

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

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

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

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

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

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

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

2.1.6 利用sort停止排序

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

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

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

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

入门: 最全的零根底学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代码?这几招很香! 相关回复(1)

烈焰战车
烈焰战车
沙发
这几招Python代码优化的技巧非常实用,可以让你的的代码更加简洁、易懂和高效,优雅地书写Pyhton需要不断练习和实践这些优化方法!
6天前 (05-26 07:16)回复00
取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息