其他
这个库,堪称 Python 编程的瑞士军刀!
The following article is from Python大数据分析 Author 费弗里
Github
仓库https://github.com/CNFeffery/DataScienceStudyNotes1 简介
Python
完成日常任务时,经常会遇到一些很小的辅助性的需求,又不想花费时间去搜索是否已有现成的库实现了这些功能,往往则需要自己临时编写一些逻辑或函数。funcy
就是其中非常实用的一个,它汇集了数量惊人的实用函数及装饰器,帮助我们使用Python
更好的践行「函数式编程」理念。2 funcy中的实用API
funcy
的设计宗旨就是汇集一系列花哨的实用函数,其在不断地迭代过程中,已经积累下相当多的功能,下面我们就来学习其中代表性的一些。pip install funcy
完成安装后,推荐大家按照如下方式进行导入:「无限计数器」
funcy
中的count()
可以生成一个可指定起点和步长的无限迭代器,默认参数start=0
,step=1
,我们可以用它来替代常规的while
循环+自增变量的逻辑:print(i, end='\r')
# 当i大于等于1000时停止迭代,否则继续
if i >= 1000:
break
「展平嵌套数组」
funcy
中的flatten()
可以用来展平任意的嵌套数组:「在指定数组中插空」
funcy
中的interpose()
可以用来将指定元素插入到对应数组的两两元素之间:「批量删除满足指定条件的元素」
funcy
中有两种从原始列表中删除指定元素的方法,方式1是使用remove()
来传入条件判断函数来删除满足条件的元素,类似filter()
的方式:funcy
中的without()
,它可以帮我们从原始数组中排除指定的1个或多个元素,譬如下面我们把2、5、7、9排除掉:「按照制定条件分组划分原始数组」
funcy
中提供了group_by()
函数,帮助我们传入函数,作用于指定数组的每个元素上,并自动按照返回的结果进行分组输出,就像下面的例子那样:「等长度拆分数组,丢弃末尾长度不足的部分」
funcy
中的partition()
帮助我们对输入的数组做指定长度的切片划分,譬如下面的例子,我们对列表[0, 1, ..., 10]进行长度为3的切片拆分,剩余不足长度3的部分就会被丢弃:「等长度拆分数组,并保留长度不足的部分」
partition()
功能相似,funcy
中的chunks()
会在等长度拆分数组的同时,保留末尾长度不足的部分单独输出:「输出相邻成对元素二元组」
funcy
中的pairwise()
,我们可以对输入数组从头开始,将相邻的成对元素以二元组的形式输出:「合并多个同类型对象」
merge()
,我们可以将传入的多个同类型数据结构拼成一个完整的,这在合并集合或字典时尤其受用:「阻止函数遇到错误时的常规报错方式」
try...except...
逻辑,而funcy
中的silent()
则可以让这个过程变得很省事:「阻止函数遇到指定错误时的常规报错方式」
silent()
会帮助传入函数遇到任意错误时返回None,而funcy
中的ignore()
则赋予我们指定错误类型,以及报错时设定返回值的能力:「装饰指定函数,使其记忆历史执行记录值」
funcy
中的memoize
装饰器就可以帮助我们快速改造自己的函数:「以标签:值的方式辅助debug」
print()
循环过程变量变化情况的debug
方式虽然很粗糙,但有些时候下却很方便,但在一些诸如「列表推导」等情况下却不太方便注入print()
代码。funcy
中的tap()
函数,我们可以将迭代变量传入,并填写对应说明标签,即可快速查看运行过程,tap()
的逻辑其实很简单,相当于把输入值打印一下再原封不动地返回,但既然有现成的API,何乐而不为~「约束某个函数的可执行次数」
funcy
中提供的装饰器once
就可以帮助我们快速实现这个功能,并且保证了线程安全:funcy
还拥有其他众多的实用API,你可以进入其官方文档进行查看( https://funcy.readthedocs.io/en/stable/ )。推荐阅读
装上后这 14 个插件后,PyCharm 真的是无敌的存在!
分析了 40000+ 条内衣数据,我终于发现了罩杯的秘密...