(数据科学学习手札107)在Python中利用funct实现链式风格编程

  链式编程是一种非常高效的组织代码的方式,典型如pandas与scikit-learn中的pipe(),以及R中的管道操作符%>%等,它们都可以帮助我们像连接管道一样,将计算过程中的不同步骤顺滑的连接起来,从而取代繁琐的函数嵌套以及避免多余中间变量的创建。

(数据科学学习手札107)在Python中利用funct实现链式风格编程

图1

  链式编程与常规写法的比较如下例:

# 非链式写法 func4(func3(func2(func1(A)))) # 链式写法 A.func1().func2().func3().func4()

  哪一种写法更简洁明了,想必大家一眼就看得出来,而今天的文章就将带大家认识如何借助funct的力量,来改造Python原生列表,赋予其链式计算的能力。

2 利用funct.Array实现链式计算

  funct的设计理念就是类似Python列表但更棒,它借鉴了numpy的很多特点,配合功能丰富的各种链式计算方法,使得我们在使用它完成计算任务编写代码如丝般顺滑时~

  利用pip install funct完成安装(本文演示版本为0.9.2)之后,下面我们来认识它的一些优秀特性吧~

2.1 funct.Array的创建

  funct中类比列表和numpy中的数组,创造了Array这种特别的数据结构,常用的有如下几种创建方式:

从其他数据结构创建

  最常规的方式是从现有的其他数据结构,转换到Array,常见如下面的几个例子:

(数据科学学习手札107)在Python中利用funct实现链式风格编程

图2

类似numpy风格的规则创建方法

  除了从现成的数据中创建Array之外,我们还可以类似numpy中的linspace()等API那样,基于规则批量创建数据,常用的有如下两种方法:

(数据科学学习手札107)在Python中利用funct实现链式风格编程

图3

创建嵌套Array

  既然是建立在列表的基础上,那么funct对嵌套Array尤其是不规则嵌套Array的支持也是很到位的:

(数据科学学习手札107)在Python中利用funct实现链式风格编程

图4

  但在配合多个numpy数组构建嵌套Array时要注意,最后一定要加上toArray()方法才能彻底完成转换:

(数据科学学习手札107)在Python中利用funct实现链式风格编程

图5 2.2 funct.Array的索引

  大致介绍完如何创建funct.Array之后,很重要的一点就是如何对已有Array进行索引,在funct中针对Array设计了如下几种丰富的索引方式:

列表式索引

  既然继承自列表,自然可以使用Python原生列表的索引与切片方式:

(数据科学学习手札107)在Python中利用funct实现链式风格编程

图6

数组式索引

  我们都知道Python原生列表不能传入一系列标号对应的数组来一次性索引出多个值,除非转换为numpy数组或pandas的Series,但这又会在一些应用场景下丢失灵活性,但在Array中,它可以!

(数据科学学习手札107)在Python中利用funct实现链式风格编程

图7

Bool值索引

  Array同样支持传入Bool值索引,使得我们可以将某个条件判断之后的判断结果作为索引依据传入:

(数据科学学习手札107)在Python中利用funct实现链式风格编程

图8

多层索引

  既然Array是支持嵌套结构的,自然可以进行多层索引,但需要注意的是:

(数据科学学习手札107)在Python中利用funct实现链式风格编程

图9 2.3 funct.Array的链式骚操作

  讲完了如何创建与索引funct.Array之后,就来到了本文的重头戏——Array的链式运算上,在funct.Array中,几乎所有常见的数值与逻辑运算都被封装到方法中,我们来一阶一阶的来看看不同情况下如何组织代码:

level1:基础的数值运算

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjxdx.html