前面我们介绍了高阶函数,python自带了一些高阶函数,也就是python内置高阶函数。
map()映射函数。
入参:一个参数是函数;另外一个参数是可迭代的对象。作用:map()映射函数将传入的函数依次作用到传入可迭代对象的每一个元素上, 得到一个新的可迭代对象并返回。
返回值:一个迭代器。
例子一:计算出列表[1, 2, 3, 4, 5]中所有元素的平方数。
#!/usr/bin/env python
old_list = [1, 2, 3, 4, 5]
def f(x):
return x*x
new_list = map(f, old_list)
print(new_list)
print(list(new_list))
输出结果:
<map object at 0x000002377541C3C8>
[1, 4, 9, 16, 25]
说明:
例子二:将输入的用户名列表规范化,即修改为首字母大写,其余字母小写。
#!/usr/bin/env python
def CorrectName(name):
return name.lower.capitalize()
bad_name = ['efon', 'mARk', 'fiGhtiNg']
good_name = map(CorrectName, bad_name)
print(bad_name)
print(list(good_name))
输出结果:
['efon', 'mARk', 'fiGhtiNg']
['Efon', 'Mark', 'Fighting']
说明:
类似于 map() 函数, reduce()函数可以把一个函数作用在一个序列上。
与 map()的区别在于, 这个传入的函数必须具有两个参数。
例子一:使用reduce()实现累加效果。
#!/usr/bin/env python
from functools import reduce
def f(x,y):
return x+y
numbers = [1, 2, 3, 4, 5]
print(reduce(f,numbers))
print(sum(numbers))
输出结果:
15
15
说明:
reduce()执行过程为:
例子二:使用reduce()实现求乘积的功能。
#!/usr/bin/env python
from functools import reduce
def f(x,y):
return x * y
numbers = [1, 2, 3, 4, 5]
print(reduce(f,numbers))
结果输出:
120
python内建的filter()函数用于过滤序列。与map()函数类似,filter() 函数也接收一个函数和一个序列。
不同之处在于,filter()函数把传入的函数依次作用于每个元素, 然后根据返回值是True还是False决定是保留还是丢弃该元素。
例子一:删除列表中的偶数, 保留奇数可以通过如下程序实现 。
#!/usr/bin/env python
def f(x):
return x % 2 == 1
numbers = range(1, 11)
odds = filter(f, numbers)
print(list(odds))
输出结果:
[1,3,5,7,9]
例子二:使用filter()删掉一个序列中的所有空字符串。
#!/usr/bin/env python
def f(x):
return x and x.strip()
old_strs = ['Efon', 'Mark', '', 'Fighting', '', None]
new_strs = filter(f, old_strs)
print(list(new_strs))
输出结果:
['Efon', 'Mark', 'Fighting']
pytyon内置的 sorted()函数可以对序列中的元素进行排序。
例子一:将一个包含数字的序列从小到达进行排列:
numbers = [1, 2, -3, -4]
print(sorted(numbers))
输出结果:
[-4, -3, 1, 2]
说明:
reverse=True
。key=str.lower。
参考:- 《物联网Python开发实战》 |
---|