一番码客 : 挖掘你关心的亮点。
http://www.efonmark.com
本文目录:
[TOC]
前面我们介绍了高阶函数,python自带了一些高阶函数,也就是python内置高阶函数。
map()
map()映射函数。
入参: 一个参数是函数; 另外一个参数是可迭代的对象。
作用:map()映射函数将传入的函数依次作用到传入可迭代对象的每一个元素上, 得到一个新的
可迭代对象并返回。
返回值:一个迭代器。
例子一:计算出列表[1, 2, 3, 4, 5]中所有元素的平方数。
1 | #!/usr/bin/env python |
2 | old_list = [1, 2, 3, 4, 5] |
3 | def f(x): |
4 | return x*x |
5 | new_list = map(f, old_list) |
6 | print(new_list) |
7 | print(list(new_list)) |
输出结果:
1 | <map object at 0x000002377541C3C8> |
2 | [1, 4, 9, 16, 25] |
说明:
map() 函数返回的结果 new_list 是一个迭代器, 而迭代器是惰性序列, 因此可以通过list()函数把整个列表都计算出来后输出。
map()函数不改变原有序列, 而是返回一个新的序列。
例子二:将输入的用户名列表规范化,即修改为首字母大写,其余字母小写。
1 | #!/usr/bin/env python |
2 | def CorrectName(name): |
3 | return name.lower.capitalize() |
4 | |
5 | bad_name = ['efon', 'mARk', 'fiGhtiNg'] |
6 | good_name = map(CorrectName, bad_name) |
7 | print(bad_name) |
8 | print(list(good_name)) |
输出结果:
1 | ['efon', 'mARk', 'fiGhtiNg'] |
2 | ['Efon', 'Mark', 'Fighting'] |
说明:
- Python lower() 方法转换字符串中所有大写字符为小写。
- Python capitalize()将字符串的第一个字母变成大写,其他字母变小写。对于 8 位字节编码需要根据本地环境。
reduce()
类似于 map() 函数, reduce()函数可以把一个函数作用在一个序列上。
与 map()的区别在于, 这个传入的函数必须具有两个参数。
例子一:使用reduce()实现累加效果。
1 | #!/usr/bin/env python |
2 | from functools import reduce |
3 | def f(x,y): |
4 | return x+y |
5 | numbers = [1, 2, 3, 4, 5] |
6 | print(reduce(f,numbers)) |
7 | print(sum(numbers)) |
输出结果:
1 | 15 |
2 | 15 |
说明:
reduce()执行过程为:
- 首先计算前两个元素: f(1, 2), 结果为 3;
- 再把计算结果和第三个元素进行计算:f(3, 3), 结果为6;
- 紧接着把结果和第四个元素进行计算:f(6, 4), , 结果为10;
- 继续把结果和第五个元素进行计算:f(10, 5), 结果为15。
- reduce()函数还可以接收第 3个可选参数作为计算的初始值。比如print(reduce(f, numbers, 10)),结果将是25,因为首先计算f(10, 1)。
例子二:使用reduce()实现求乘积的功能。
1 | #!/usr/bin/env python |
2 | from functools import reduce |
3 | def f(x,y): |
4 | return x * y |
5 | numbers = [1, 2, 3, 4, 5] |
6 | print(reduce(f,numbers)) |
结果输出:
1 | 120 |
filter()
python内建的filter()函数用于过滤序列。 与map()函数类似,filter() 函数也接收一个函数和一个序列。
不同之处在于,filter()函数把传入的函数依次作用于每个元素, 然后根据返回值是True还是False决定是保留还是丢弃该元素。
例子一:删除列表中的偶数, 保留奇数可以通过如下程序实现 。
1 | #!/usr/bin/env python |
2 | def f(x): |
3 | return x % 2 == 1 |
4 | numbers = range(1, 11) |
5 | odds = filter(f, numbers) |
6 | print(list(odds)) |
输出结果:
1 | [1,3,5,7,9] |
例子二:使用filter()删掉一个序列中的所有空字符串。
1 | #!/usr/bin/env python |
2 | def f(x): |
3 | return x and x.strip() |
4 | old_strs = ['Efon', 'Mark', '', 'Fighting', '', None] |
5 | new_strs = filter(f, old_strs) |
6 | print(list(new_strs)) |
输出结果:
1 | ['Efon', 'Mark', 'Fighting'] |
sorted()
pytyon内置的 sorted()函数可以对序列中的元素进行排序。
例子一:将一个包含数字的序列从小到达进行排列:
1 | numbers = [1, 2, -3, -4] |
2 | print(sorted(numbers)) |
输出结果:
1 | [-4, -3, 1, 2] |
说明:
- python默认的字符串排序方法是按照 ASCII码的大小排列的。
- 实际上, sorted()函数是高阶函数, 可以通过key接收一个函数自定义排序方法。比如传入绝对值函数abs。
- 如果要实现反向排序,可以用
reverse=True
。 - 给字符排序时,如果要忽略首字母大、 小写的影响,可以用
key=str.lower。
参考: - 《物联网Python开发实战》 |
![]() |
免费知识星球:一番码客-积累交流 微信公众号:一番码客 微信:Efon-fighting 网站:http://www.efonmark.com |