大家好我是费老师,一些比较熟悉 pandas
的读者朋友应该经常会使用 query()
、 eval()
、 pipe()
、 assign()
等 pandas
的常用方法(相关知识详见我的 pandas
专题教程 https://www.cnblogs.com/feffery/tag/pandas/
),书写可读性很高的 链式数据分析处理代码,从而更加丝滑流畅地组织代码逻辑。
但在原生 Python
中并没有提供类似 shell
中的管道操作符 |
、 R
中的管道操作符 %>%
等语法,也没有针对列表等数组结构的可进行链式书写的快捷方法,譬如 javascript
中数组的 map()
、 filter()
、 some()
、 every()
等。
正所谓”标准库不够,三方库来凑”, Python
原生对链式写法支持不到位没关系,我们可以使用一些简单方便且轻量的第三方库来协助我们在 Python
代码中大面积实现链式写法,今天的文章中费老师我就将带大家一起学习相关的知识技巧~
我们将使用到 pipe
这个第三方库,它不仅内置了很多实用的 管道操作函数,还提供了将常规函数快捷 转换为管道操作函数的方法,使用 pip install pipe
对其进行安装即可。
pipe
的用法非常方便,类似 shell
中的管道操作:以你的数组变量为起点,使用操作符 |
衔接 pipe
内置的各个常见管道操作函数,组装起自己所需的计算步骤即可,譬如,我们筛选输入数组中为偶数的,再求平方,就可以写作:
import pipe
list(
range(10) |
pipe.filter(lambda x: x % 2 == 0) |
pipe.select(lambda x: x ** 2)
)
因为 pipe
搭建的管道默认都是惰性运算的,直接产生的结果是生成器类型,所以上面的例子中我们最外层套上了 list()
来取得实际计算结果,更优雅的方式是配合 pipe.Pipe()
,将 list()
也改造为管道操作函数:
from pipe import Pipe
(
range(10) |
pipe.filter(lambda x: x % 2 == 0) |
pipe.select(lambda x: x ** 2) |
Pipe(list)
)
在上面的简单例子中我们使用到的 filter()
、 select()
等就是 pipe
中常见的管道操作函数,事实上 pipe
中的管道操作函数相当的丰富,下面我们来展示其中一些常用的:
2.1 pipe中常用的管道操作函数
如果你想要将任意嵌套数组结构展平,可以使用 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)
)
我们最开始的例子中使用过它,用法就是基于传入的 lambda
函数对每个元素进行条件判断,并保留结果为 True
的,与 javascript
中的 filter()
方法非常相似:
(
[1, 4, 3, 2, 5, 6, 8] |
# 保留大于5的元素
pipe.filter(lambda x: x > 5) |
Pipe(list)
)
这个函数非常实用,其功能相当于管道操作版本的 itertools.groupby()
,可以帮助我们基于 lambda
函数运算结果对原始输入数组进行分组,通过 groupby()
操作后直接得到的结果是分组结果的二元组列表,每个元组的第一个元素是分组标签,第二个元素是分到该组内的各个元素:
基于此,我们可以衔接很多其他管道操作函数,譬如衔接 select()
对分组结果进行自定义运算:
这个函数是 pipe()
中核心的管道操作函数,通过前面的若干例子也能弄明白,它的功能是基于我们自定义的函数,对上一步的运算结果进行遍历运算。
相当于内置函数 sorted()
的管道操作版本,同样支持 key
、 reverse
参数:
上述内容足以支撑大部分日常操作需求,你也可以在 https://github.com/JulienPalard/Pipe
中查看 pipe
的更多功能介绍。
以上就是本文的全部内容,欢迎在评论区与我进行讨论~
Original: https://www.cnblogs.com/feffery/p/16794858.html
Author: 费弗里
Title: (数据科学学习手札144)使用管道操作符高效书写Python代码
相关阅读
Title: 自动化测试框架pytest系列一
各位小伙伴们,大家好,今天给大家带来的pytest方面的干货,超详细。
大家在编写自动化测试脚本的时候都会用到测试框架,pytest就是其中一种,而且是超级好用,好学的一种,它的优点就不在这里讲了,今天主要是讲一下pytest执行用例的方式
先来简单的给没有接触过pytest的伙伴了解一下pytest的一些基本规则:
1.所有的单测文件名都需要满足test_ _.py格式或__test.py格式。
2.在单测文件中,测试类以Test开头,并且不能带有 init 方法(注意:定义class时,需要以Test开头,不然pytest是不会去运行该class的)
3.在单测类中,可以包含一个或多个test_开头的函数。
来个pytest的helloworld吧,代码如下:

运行后,结果如下:

我们测试一个项目肯定不只一两个测试用例,通常都有很多测试用例,同样我们编写自动化测试用例脚本也不可能才一两个脚本,也是有很多脚本的,通常都会归类,放到某个文件夹下面,接下来我们看看怎么一下执行一个目录中的所有用例,首先建立一个目录,名为Filetest,里面的模块如下:

我们在创建一个文件,来执行这些用例,代码如下:
import pytest
#执行Filetest目录中所有的用例
pytest.main(["./Filetest/"])
执行结果如下:

当然我们也可以执行目录里某个模块里所有的用例,代码如下:
pytest.main(["./Filetest/hello_py2_test.py"])
也可以执行模块里某个用例,代码如下:
pytest.main(["./Filetest/hello_py_test.py::test_01"])
我们还可以更加灵活的根据标记,双冒号,类名,类中的某个用例,关键字匹配,出现失败就停止等等方法去执行我们的用例,如下:
#执行某个模块里某个用例
pytest.main(["./Filetest/hello_py_test.py::test_01"])
#通过标记来执行某个模块里某几个用例
pytest.main(["./Filetest/slow_test.py","-s","-m","slow"])
#执行某个模块里某个类里的某个方法
pytest.main(["./Filetest/myclass_test.py::TestMaker::test_b","-s"])
#有执行到一个错误用例就停止
pytest.main(["./Filetest/",'-x'])
#出现2个失败就终止测试,数字可以变
pytest.main(["./Filetest/",'--maxfail=2'])
#通过关键字匹配执行用例
#1.执行Filetest目录里所有函数中有test_0字符串的用例
pytest.main(["./Filetest/",'-k',"test_0"])
#2.执行Filetest目录里所有类名中有Maker2
pytest.main(["./Filetest/",'-k',"Maker2"])
#3.不执行Filetest目录里所有类名中有Maker2里有test_b1字符串的用例
pytest.main(["./Filetest/",'-s','-k',"Maker2 and not test_b1"])
#4.不执行Filetest目录里所有函数中有test_0字符串的用例
pytest.main(["./Filetest/",'-k',"not test_0"])
想要更详细的代码,可以访问如下网站:
http://it.qfedu.com/oa.php/Public/share?c2lkPTEwOTM=
今天的pytest的技术就先到这啦,后面我们还会推出更多关于pytest的技术,小伙伴们可以持续的关注我们哦,当然我们发布的技术不只是只有测速框架哦,也不是只有测试技术,也有职场经验和职场技巧方面的知识的
总结:pytest作为比较流行的单元测试框架,还是比较多人使用的,其实测试框架不会太难学习,基本上学习了一种,其他的大部分都差不多,等积累了一定的测试知识,再学习其他的测试框架就很容易了。
最后我们测试人善于使用测试工具,提高测试效率才能在企业中不断进步,收获更多更好的企业资源,在职场中才能发展的越来越好。测试技术一直在更新,也鞭策我们测试人要不断的学习新的测试技术。
最后感谢每一个认真阅读我文章的人,下面这个网盘链接也是我费了几天时间整理的非常全面的,希望也能帮助到有需要的你!

这些资料, 对于想转行做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……
如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。
敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。
自学推荐B站视频:
零基础转行软件测试:38天自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!
自动化测试进阶:已上岸华为,涨薪20K,2022最适合自学的python自动化测试教程,自己花16800买的,无偿分享

Original: https://blog.csdn.net/weixin_57805858/article/details/126319199
Author: 代码小怡
Title: 自动化测试框架pytest系列一
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/363449/
转载文章受原作者版权保护。转载请注明原作者出处!