您的位置:首页 > 编程语言 > Python开发

【Python】高阶函数介绍

2016-04-30 18:30 656 查看
其实函数可以作为变量,之前学过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()
把传入的函数依次作用于每个元素,然后根据返回值是
True
False
决定保留还是丢弃该元素。

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

>>>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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: