【Python】高阶函数介绍

其实函数可以作为变量,之前学过C++,对于这种用法并不奇怪。无非就是函数充当变量,可以传入函数而已。
下面分别介绍 Python 中常见的高阶函数:map/reduce, filter, sorted

map###


map() 函数接收两个函数,一个是函数,一个是序列(可迭代均可), map 将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回


举个例子:将 list 中所有的数字转化为字符串:

>>> map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])
['1', '2', '3', '4', '5', '6', '7', '8', '9']

reduce###


reduce() 把一个函数作用在一个序列[x1, x2, x3.....] 上,这个必须接收两个函数reduce 将结果和序列的下一元素做累积计算


例子1:将序列 [1, 3, 5, 7, 9] 变换成整数 13579。

>>>reduce(lambda x, y : x * 10 + y, [1, 3, 5, 7, 9])
13579

filter###


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


例子: 将一个序列中的空字符删掉。

>>>filter(lambda s : s and s.strip(), ['A', '', 'B', None, 'C', '  '])
['A', 'B', 'C']

sorted###


>>>sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]

传入自定义函数可以实现自定义排序。

例子1:排序应该忽略大小写,按照字母序排序。

def cmp_ignore_case(s1, s2):
    u1 = s1.upper()
    u2 = s2.upper()
    if u1 < u2:
        return -1
    if u1 > u2:
        return 1
    return 0
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], lambda s1, s2 : s1.upper() -s2.upper())
['about', 'bob', 'Credit', 'Zoo']

另外数字反序有个很好的方法:

sorted([36, 5, 12, 9, 21][::-1]
原文地址:https://www.cnblogs.com/nju2014/p/5449094.html