高阶函数:map、reduce、filter、sorted

来源:互联网 发布:微信加活粉软件 编辑:程序博客网 时间:2024/05/28 16:27

1、map函数:传入两个参数,一个函数,一个可迭代对象。将函数依次作用于可迭代对象并把结果作为新的生成器返回。

>>> 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]
2、reduce函数:传入两个参数,一个函数,一个序列,该函数必须接收两个参数,reduce把结果和序列的下一个元素做累积计算。

>>> from functools import reduce>>> def fn(x, y):...     return x * 10 + y...>>> reduce(fn, [1, 3, 5, 7, 9])13579
注:python 3.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce


:做练习题时学到两个函数

(2)pow()返回x的y次方的值

pow( x, y ) 

(2)、index() 方法检测字符串中是否包含子字符串 str 

str.index(str, beg=0, end=len(string))   str -- 指定检索的字符串、beg -- 开始索引,默认为0、end -- 结束索引,默认为字符串的长度。

3、filter函数:用于筛选序列,两个参数,一个函数,一个序列。函数作用于每个序列,根据结果返回是True还是False决定是保留还是丢弃该元素。最终返回的是一个生成器,惰性序列。


求素数例子:

def _odd_iter():    n = 1    while True:        n = n + 2        yield n
def _not_divisible(n):    return lambda x: x % n > 0
def primes():    yield 2    it = _odd_iter() # 初始序列    while True:        n = next(it) # 返回序列的第一个数        yield n        it = filter(_not_divisible(n), it) # 构造新序列
# 打印1000以内的素数:for n in primes():    if n < 1000:        print(n)    else:        break

例子中_not_divisible()函数中x变量怎样理解?

_not_disivible()函数体中包含了一个匿名函数,在理解传值过程做了实验:

(1)、传一个值,如:_not_disivible(26),提示:

<function _not_disivible.<locals>.<lambda> at 0x7f5a45fde378>

(2)、()内传两个值,如:_not_disivible(26,2)。提示:

TypeError: _not_disivible() takes 1 positional argument but 2 were given

(3)、传两个值,如:_not_disivible(2)(4),提示:

False

(4)、传两个值,如:_not_disivible(2)(5),提示:

True

综上:定义的函数中包含匿名函数时,传的参数有两个,里面的参数是传给定义的函数,外面的参数传匿名函数。

上述求素数的例子,n对应n,x对应it。


4、sorted函数:排序算法

sorted函数原型:

sotred(Iterable,[cmp,key,reverse=True])

第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表(list)。
可选的参数有三个,cmp、key和reverse。
1)cmp指定一个定制的比较函数,这个函数接收两个参数(iterable的元素),如果第一个参数小于第二个参数,返回一个负数;如果第一个参数等于第二个参数,返回零;如果第一个参数大于第二个参数,返回一个正数。默认值为None。
2)key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认值为None。
3)reverse是一个布尔值。如果设置为True,列表元素将被倒序排列。
key参数的值应该是一个函数,这个函数接收一个参数并且返回一个用于比较的关键字。对复杂对象的比较通常是使用对象的切片作为关键字。例如:
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda s: s[2]) #按年龄排序
# [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]








阅读全文
0 0
原创粉丝点击