map()函数接收两个参数,第一个是函数,第二个是Iterable(可迭代对象)。map将函数作用与序列的每一个元素,并作为结果返回Iterator(迭代器)。举例如下:
reduce()函数也接收两个参数,第一个是函数,第二个是Iterable。reduce将函数作用在序列上,将结果继续和序列的下一个元素做累积计算。效果就是:
举例如下:将[1,3,5,7,9]转化为13579
map()可以与reduce()配合起来使用:实现将str转化为int,只需要几行代码
filter()也接收一个函数和一个Iterable序列,将函数依次作用与序列中的每个元素,然后保留返回True的元素,丢弃返回False的元素,最终返回Iterator序列。通过help()了解filter的说明:
>>> help(filter) Help on class filter in module builtins: class filter(object) | filter(function or None, iterable) --> filter object | | Return an iterator yielding those items of iterable for which function(item) | is true. If function is None, return the items that are true.
filter()主要是实现筛选功能。例如:筛选list中的奇数
sorted()函数可以对Iterable序列进行排序。默认是从小到大的升序,也可指定reverse=True改为从大到小。它还可以接受一个函数key来自定义排序方法:该函数会作用与序列的每一个元素,然后根据key函数返回的结果进行排序。
# 对list进行排序 >>> sorted([1, -5, 3]) [-5, 1, 3] # 接收key函数实现自定义排序,按绝对值大小排序 >>> sorted([1, -5, 3], key=abs) [1, 3, -5] # 反向排序 >>> sorted([1, -5, 3], key=abs, reverse=True) [-5, 3, 1]
高阶函数除了能将函数作为参数,还可将函数作为返回值。例如:
>>> def lazy_sum(*args): ... def sum(): ... s = 0 ... for n in args: ... s = s + n ... return s ... return sum # 返回求和函数 ... >>> f=lazy_sum(1,2,3,4,5) # 调用lazy_sum时,返回求和函数而不是求和结果 >>> f <function lazy_sum.<locals>.sum at 0x101c09ae8> >>> f() # 调用f()时,才会计算求和结果 15
闭包:在上面的例子中,lazy_sum函数中定义了函数sum,内部sum函数可以引用外部函数lazy_sum的参数和局部变量(args)。当lazy_sum返回sum时,相关参数和变量(args)都保存在返回的sum函数中,这种成为闭包。返回闭包时候需要注意一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-70754-8.html
烊烊好可爱
六十多年前我们那么穷
万儿八千一年多了几块钱