美文网首页
python进阶-函数式编程库toolz用法介绍-part1

python进阶-函数式编程库toolz用法介绍-part1

作者: DATA_KENGOU | 来源:发表于2018-08-21 10:47 被阅读0次

  函数式编程除去本身一套的哲学之外,在python中通常可以起到简化代码,增强程序的可读性的作用,一般提起python函数式编程都会涉及到itertoolsfunctoolsoperator等模块的讲解,以及内置的mapreducefilterallanyenumeratezip等函数的用法,本篇文章需要同学在对上述三方库和内置函数有一定理解的基础上来进一步了解使用toolz模块。
  toolz模块的源码在这里
  下面通过一些简单的例子来说明利用toolz进行函数式编程的方法(程序运行环境为python3.6)
  首先定义一些简单的函数和样例数据备用

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def square(x):
    return x ** 2

def iseven(n):
    return n % 2 == 0

def add(x, y):
    return x + y

def mul(x, y):
    return x * y

def lesser(x, y):
    if x < y:
        return x
    else:
        return y

def greater(x, y):
    if x > y:
        return x
    else:
        return y

  内置的map函数, 即将第一个参数传入的函数作用与第二参数传入的列表,注意在python3中mapfilter等返回的是一个迭代器,所以想要得到全部的值需要用list转换一下。

list(map(square, data))
#>>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

  map的作用方式类似于numpy数组的广播方式(broadcasting)

import numpy as np
X = np.arange(1, 11)
X**2
#>>> array([  1,   4,   9,  16,  25,  36,  49,  64,  81, 100])

  还可以用列表解析的方式等价于map的作用方式

res = [square(d) for d in data] 
#>>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

  下面是filter函数,第一个参数为函数,第二个为数据列表,返回列表中使函数值为真的数据。

list(filter(iseven, data))
#>>> [2, 4, 6, 8, 10]

  reduce的用法如下,即将列表中的元素从左到右累计计算,计算的结果作为参数继续向后传递,最终得到一个结果。注意,reduce的第三个参数可以传入一个初始值,从而影响最后的结果。

from functools import reduce
#reduce函数在py3中放在了functools里
reduce(add,data)
#>>> 55
reduce(add,data,10)
#>>> 65

  lambda函数即匿名函数,结合上面的mapreduce等方法通常能够使得代码简洁,十分方便。下面以lambda来实现内置的求和函数。

sum_ = lambda data: reduce(add,data,0)
sum_(data)
#>>> 55

  下面终于到toolz出场了。toolz.groupby可以看做是上面filter的增强版,不仅可以输出满足条件的子列表,还可以将数据划分到相关的不同集合

groupby(iseven, data)
#>>> {False: [1, 3, 5, 7, 9], True: [2, 4, 6, 8, 10]}
groupby(lambda n: n % 3, data)
#>>> {0: [3, 6, 9], 1: [1, 4, 7, 10], 2: [2, 5, 8]}
groupby(len, ['Alice', 'Bob', 'Charlie', 'Dan', 'Edith', 'Frank'])
# >>> {3: ['Bob', 'Dan'], 5: ['Alice', 'Edith', 'Frank'], 7: ['Charlie']}

  接下来将会介绍更多toolz的相关用法。。。

相关文章

  • python进阶-函数式编程库toolz用法介绍-part1

      函数式编程除去本身一套的哲学之外,在python中通常可以起到简化代码,增强程序的可读性的作用,一般提起pyt...

  • python进阶-函数式编程库toolz用法介绍-part2

      在第一部分简单介绍了python的函数式编程基本方法后,从这部分开始将开始更深入的学习toolz的使用方法。话...

  • toolz, python函数式库事实标准

    toolz 是什么 操作迭代器,函数和字典的函数集合简而言之,toolz是python事实上的函数式标准库 主要特...

  • Python进阶语法——函数式编程、模块,面向对象

    一、 Python进阶学习 一、函数式编程 1.1函数式编程 1.2高阶函数 1.2.1 import mathd...

  • python进阶

    教程地址:python进阶 - 慕课网 python函数式编程 变量可以指向函数: f = absprint(f)...

  • Python高阶函数

    本篇将介绍Python的函数式编程,介绍高阶函数的原理,更多内容请参考:Python学习指南 函数式编程 函数是P...

  • python函数式编程

    备注 本篇为慕课网python进阶教程中函数式编程章节的笔记。 简介 函数式编程允许将函数作为输入(参数)输出(返...

  • Python进阶

    Python进阶框架 希望大家喜欢,点赞哦首先感谢廖雪峰老师对于该课程的讲解 一、函数式编程 1.1 函数式编程简...

  • Python进阶

    本文主要是基于慕课网课程《python进阶》学习,并做一些总结。该课程详细介绍Python强大的函数式编程和面向对...

  • 编程范式 —— 函数式编程入门

    该系列会有 3 篇文章,分别介绍什么是函数式编程、剖析函数式编程库、以及函数式编程在 React 中的应用,欢迎关...

网友评论

      本文标题:python进阶-函数式编程库toolz用法介绍-part1

      本文链接:https://www.haomeiwen.com/subject/urzmbftx.html