什么是高阶函数?
高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。
map()映射函数
如上图所示,map()函数其实是一个一一映射的关系
使用方法: map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为迭代器返回。
- 注:map()函数返回的是一个迭代器,需手动将其转换成序列
举个栗子:
代码实现:
func = lambda x: x**2
效果如下:
>>> map(func, [1, 2, 3, 4, 5])
<map object at 0x00000268C7446188> #函数返回值其实是一个迭代器
>>> list(map(func, [1, 2, 3, 4, 5]))
[1, 4, 9, 16, 25] #手动将其转换成列表
再举两个栗子:
>>> list(map(int, "123456789"))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> set(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
{
'5', '8', '3', '7', '6', '4', '1', '2', '9'}
filter()过滤函数
使用方法: filter()接收一个函数函数 和一个序列,这个函数的作用是对序列里的每个元素进行判断,返回True或False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新序列的迭代器。
举个栗子:
代码实现:
def func(x):
/*保留整数序列中的偶数部分*/
if x % 2 == 0:
return True
else:
return False
效果如下:
>>> list(filter(func, [x for x in range(1, 11)]))
[2, 4, 6, 8, 10]
再举个栗子
>>> names = ["Joker", "BatMan", "SuperMan", "me"]
>>> list(filter(lambda x:x.islower(), names))
['me'] #卑微的我
reduce()函数
作用: 对参数序列中元素进行累积
使用方法: 将一个序列中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果 。
注:1. 与上面两个函数不同,reduce()返回的是一个值,而不是迭代器对象
2. 在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数
举个栗子:
>>> from functools import reduce
>>> add = lambda x, y:x + y
>>> reduce(add, range(1, 101))
5050
sorted()自定义排序函数
作用: 对所有可迭代的对象进行排序操作
sort 与 sorted 区别:
-
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作;
-
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
sorted 语法:
sorted(iterable, key=None, reverse=False)
参数说明:
- iterable – 可迭代对象
- key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序
- reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)
返回值:重新排序后的新的列表
举个栗子
题目描述:
- 随机生成一个包含10个1~100的整数列表,对其中偶数位索引的元素进行升序排序,奇数位索引的元素进行降序排序。
import random
ls = random.sample(range(1, 101), 10)
print(ls) //排序前:[43, 71, 40, 4, 74, 58, 83, 55, 25, 54]
ls[::2] = sorted(ls[::2])
ls[1::2] = sorted(ls[1::2], reverse = True)
print(ls) //排序后:[25, 71, 40, 58, 43, 55, 74, 54, 83, 4]
再举个栗子
题目描述:
- 随机生成一个包含10个-100~100的整数列表,按照绝对值大小从小到大进行排序
import random
ls = random.sample(range(-100, 101), 10)
print(ls) //排序前:[60, -87, -73, -91, 21, -66, -95, 67, -1, 79]
ls = sorted(ls, key = abs)
print(ls) //排序后:[-1, 21, 60, -66, 67, -73, 79, -87, -91, -95]
最后,栗子真好吃!真香~~