美文网首页
廖雪峰的学习笔记(三)高阶函数

廖雪峰的学习笔记(三)高阶函数

作者: 费云帆 | 来源:发表于2019-03-18 10:50 被阅读0次

1.所谓的"高阶函数":把函数对象作为参数的函数.
2.示例:

  • map()函数:
    我们先看map。map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
>>> def f(x):
...     return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]

map()传入的第一个参数是f,即函数对象本身。由于结果r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。(之前释放"Iterator"是通过next()函数实现,而且next()只能释放一次的结果,这边通过list()可以释放全部的结果.)

  • reduce函数
    再看reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

比方说对一个序列求和,就可以用reduce实现:

>>> from functools import reduce
>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

当然求和运算可以直接用Python内建函数sum(),没必要动用reduce。

但是如果要把序列[1, 3, 5, 7, 9]变换成整数13579,reduce就可以派上用场:

>>> from functools import reduce
>>> def fn(x, y):
...     return x * 10 + y
...
>>> reduce(fn, [1, 3, 5, 7, 9])
13579

-filter()函数---所谓"过滤器"
Python内建的filter()函数用于过滤序列。

和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

例如,在一个list中,删掉偶数,只保留奇数,可以这么写:

def is_odd(n):
    return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]

相关文章

  • 廖雪峰的学习笔记(三)高阶函数

    1.所谓的"高阶函数":把函数对象作为参数的函数.2.示例: map()函数:我们先看map。map()函数接收两...

  • 学习python的第四篇

    今天学习了python的返回函数以及匿名函数 学习地址:廖雪峰的官方网站 返回函数:高阶函数除了可以接受函数作为参...

  • (二)JavaScript 函数

    本文是大神廖雪峰的JavaScript教程学习笔记。并不是教程,如有需要,请前往廖雪峰大神大博客. 一、函数定义和...

  • 廖雪峰JavaScript高阶函数

    高阶函数 函数嵌套函数,子函数接收父函数传递进来的参数 map map()传入的参数是pow,即函数对象本身 运算...

  • JavaScript学习笔记(三)

    主要源于廖雪峰老师的JavaScript教程 1. 高阶函数 参数传入函数 JavaScript的函数其实都指向某...

  • python学习笔记-声明

    本学习笔记是依照“廖雪峰”的博客进行的学习,学习中很多案例都是源自“廖雪峰”课程,仅做学习笔记使用,请各位看官手下...

  • 2018-01-25 Git学习笔记

    学习廖雪峰的Git教程所记的笔记,Git教程 - 廖雪峰的官方网站https://www.liaoxuefeng....

  • (四)JavaScript 面向对象编程

    本文是大神廖雪峰的JavaScript教程学习笔记。并不是教程,如有需要,请前往廖雪峰大神大博客. JavaScr...

  • (三)JavaScript 标准对象

    本文是大神廖雪峰的JavaScript教程学习笔记。并不是教程,如有需要,请前往廖雪峰大神大博客. 在JavaSc...

  • python学习

    使用的教材:廖雪峰教材 另外附一个廖雪峰笔记,感觉写的比我简练,可以用来查询具体用法:廖雪峰笔记 更多的可以查询:...

网友评论

      本文标题:廖雪峰的学习笔记(三)高阶函数

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