zoukankan      html  css  js  c++  java
  • Python 简明教程 --- 16,Python 高阶函数

    微信公众号:码农充电站pro
    个人主页:https://codeshellme.github.io

    对于那些快速算法,我们总是可以拿一些速度差不多但是更容易理解的算法来替代它们。
    —— Douglas Jones

    目录

    在这里插入图片描述

    高阶函数一般以函数为参数。

    本节我们介绍Python 中三个方便的高阶函数,分别是:

    • map
    • reduce
    • filter

    如果你了解过分布式系统框架---Hadoop,你应该知道map/reduce 的概念。

    Python 中的map/reduce 函数与Hadoop 中的map/reduce 基本类似。

    1,map 函数

    Python2 中,map 是一个函数。在Python3 中,map 是一个类:

    >>> map
    <class 'map'>
    

    作用:将函数func 作用于可迭代对象iterable 中的每一个元素
    原型:map(func, iterable) -> map object
    参数 func:一个函数类型的参数,该函数接收一个参数,并返回一个值
    参数 iterable:一个可迭代的对象
    返回值:一个map 对象,同时一个迭代器

    示例:

    >>> m = map(lambda x: x * x, [1, 3, 5])
    >>> m
    <map object at 0x7fe60bb1bf98>
    >>> l = [i for i in m]
    >>> l
    [1, 9, 25]
    

    参数func 可以是普通函数,也可以是匿名函数,我们这里使用了匿名函数lambda x: x * x,该函数接收一个参数,并返回该参数的平方。

    可迭代对象是一个列表[1, 3, 5],列表中的每个元素,都将传递到匿名函数中,并对每一个元素计算平方后,将结果存储到一个map 对象m 中。

    为了查看m 中的值,我们使用列表推导式生成了一个列表l,可看到列表l 就是[1, 9, 25],就是[1, 3, 5] 中每个元素的平方。

    这就是python3 中map 的基本使用方法。

    2,reduce 函数

    在Python3 中,reduce 函数被放在functools 模块,使用时,要先从functools 模块引入:

    >>> from functools import reduce
    

    作用:将函数func 作用于序列seq 中的元素,进行一系列的计算
    原型:reduce(func, seq[, initial]) -> value
    参数 func:这是一个函数类型的参数,该函数接收两个参数,并返回一个值
    参数 seq:一个序列
    参数 initial

    initial 存在时:reduce(func, [x1, x2, x3], initial) = func(func(func(initial, x1), x2), x3)
    initial 不存在时:reduce(func, [x1, x2, x3]) = func(func(x1, x2), x3)

    返回值:返回计算结果

    示例,当initial 存在时:

    >>> reduce(lambda x, y : x * y, [1, 3, 5], 6)
    90
    #   reduce(func, [1, 3, 5], 6)
    # = func(func(func(6, 1), 3), 5)
    # = ((6 * 1) * 3) * 5
    # = 90
    

    示例,当initial 不存在时:

    >>> reduce(lambda x, y : x * y, [1, 3, 5])
    15
    #   reduce(func, [1, 3, 5])
    # = func(func(1, 3), 5)
    # = (1 * 3) * 5
    # = 15
    

    3,filter 函数

    在Python3 中,filter 是一个类:

    >>> filter 
    <class 'filter'>
    

    作用:filter 用于对可迭代对象iterable 进行过滤,iterable 中的每一个元素会作为一个参数,传递到func
    原型:filter(func, iterable) --> filter object
    参数 func:这是一个函数类型的参数,该函数接受一个参数,返回一个bool

    func 返回True 时:对应的iterable 中的元素,会放在结果集中
    func 返回False 时:对应的iterable 中的元素,不会放在结果集中

    返回值:一个filter 对象,同时也是一个迭代器

    示例:

    >>> f = filter(lambda x: len(x) == 2, ['dsf', 'df', 'ad', 'dfas', 'as'])
    >>> f # 一个 filter 对象
    <filter object at 0x7f4dff484748>
    >>> list(f)  # 转化为列表,方便查看
    ['df', 'ad', 'as']
    

    (完。)


    推荐阅读:

    Python 简明教程 --- 11,Python 元组

    Python 简明教程 --- 12,Python 字典

    Python 简明教程 --- 13,Python 集合

    Python 简明教程 --- 14,Python 数据结构进阶

    Python 简明教程 --- 15,Python 函数


    欢迎关注作者公众号,获取更多技术干货。

    码农充电站pro

  • 相关阅读:
    Mach-O iOS
    IPA的构建原理 iOS
    输入网址进入网页按回车刷新网页都发生了什么?URL 输入到显示的过程?
    LeetCode另一棵树的子树Swift
    如何解决静态库的冲突问题 iOS
    LeetCode下一个更大元素 I Swift -- 单调递增栈
    UITapGestureRecognizer 和 UICollectionView/UITableView等点击事件冲突问题
    UITableView/UICollectionView调用reloadData刷新时界面闪烁
    C#绘制折线图或曲线图,直接返回Image对象或图片文件
    C#反射+继承+接口的应用
  • 原文地址:https://www.cnblogs.com/codeshell/p/13158903.html
Copyright © 2011-2022 走看看