(数据科学学习手札101)funcy:Python中的函数式编程百宝箱

孤独的人是可耻的

简介#

  我们在使用Python完成日常任务时,经常会遇到一些很小的辅助性的需求,又不想花费时间去搜索是否已有现成的库实现了这些功能,往往则需要自己临时编写一些逻辑或函数。

  而事实上已经有勤劳伟大的开发者编写了集成众多小功能于一身的第三方库,本文要给大家介绍的funcy就是其中非常实用的一个,它汇集了数量惊人的实用函数及装饰器,帮助我们使用Python更好的践行函数式编程理念。

图1

2 funcy中的实用API#

  funcy的设计宗旨就是汇集一系列花哨的实用函数,其在不断地迭代过程中,已经积累下相当多的功能,下面我们就来学习其中代表性的一些。

  使用pip install funcy完成安装后,推荐大家按照如下方式进行导入:

Copy

import funcy as fc

  • 无限计数器

  funcy中的count()可以生成一个可指定起点和步长的无限迭代器,默认参数start=0step=1,我们可以用它来替代常规的while循环+自增变量的逻辑:

Copy

`for i in fc.count():

print(i, end='r')

# 当i大于等于1000时停止迭代,否则继续
if i >= 1000:
    break` 
  • 展平嵌套数组

  funcy中的flatten()可以用来展平任意的嵌套数组:

图2

  • 在指定数组中插空

  funcy中的interpose()可以用来将指定元素插入到对应数组的两两元素之间:

图3

  • 批量删除满足指定条件的元素

  在funcy中有两种从原始列表中删除指定元素的方法,方式1是使用remove()来传入条件判断函数来删除满足条件的元素,类似filter()的方式:

图4

  第二种方式是利用funcy中的without(),它可以帮我们从原始数组中排除指定的1个或多个元素,譬如下面我们把2、5、7、9排除掉:

图5

  • 按照制定条件分组划分原始数组

  funcy中提供了group_by()函数,帮助我们传入函数,作用于指定数组的每个元素上,并自动按照返回的结果进行分组输出,就像下面的例子那样:

图6

  • 等长度拆分数组,丢弃末尾长度不足的部分

  funcy中的partition()帮助我们对输入的数组做指定长度的切片划分,譬如下面的例子,我们对列表[0, 1, ..., 10]进行长度为3的切片拆分,剩余不足长度3的部分就会被丢弃:

图7

  • 等长度拆分数组,并保留长度不足的部分

  与partition()功能相似,funcy中的chunks()会在等长度拆分数组的同时,保留末尾长度不足的部分单独输出:

图8

  • 输出相邻成对元素二元组

  利用funcy中的pairwise(),我们可以对输入数组从头开始,将相邻的成对元素以二元组的形式输出:

图9

  • 合并多个同类型对象

  利用merge(),我们可以将传入的多个同类型数据结构拼成一个完整的,这在合并集合或字典时尤其受用:

阅读 88
1 声望
0 粉丝
0 条评论
1 声望
0 粉丝
宣传栏