lambda在Python中相当于一个匿名函数,只能写一行,对于一些代码量极其简短的函数,lambda可以起到速写的作用。
代码如下:
def sum(a, b):
return a + b
sum(1, 2)
# 使用lambda函数
sum = lambda a, b: a + b
sum(1, 2)
# 结果都为3
值得注意的是,lambda中不能有return关键字
map函数有两个参数,func和*iterables, 将对每个iterable应用带参数的func,而reduce函数三个参数,function, sequence必须参数和额外的一个可选参数initial(给定一个初始值,序列中的每一项在此基础上进行运算),将对序列中的每一项应用带两个参数的函数,从左向右,最终减少序列到只剩一个值。
代码如下:
list(map(lambda x: str(x), list(range(1, 11))))
# python3中range,map都相当于迭代器函数
# 结果为 ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
# python3 中reduce从全局名字空间中移除了,
# 使用reduce需要先导入 from functools import reduce
reduce(lambda x, y: x * y, list(range(1, 11)))
# 结果为 3628800
filter函数有两个参数,function or None, iterable,为已知的序列的每个元素调用给定的布尔函数,调用中,返回值为True的元素将被添加至一个列表中,若没有指定函数即函数为None,则返回整个序列项。
代码如下:
# Python3 中filter也变成可以迭代的对象了
list(filter(lambda grades: True if grades >= 60 else False, [60, 90, 89, 78, 56, 59]))
# 输出一个列表
[60, 90, 89, 78]
另外,再补充一小节,今天在使用可变参数时,发现一种用法,对于定义的一个函数不确定要为其传递几个值或者几个键值对时,我们可以使用*arg和**kwarg作为函数的形参,这样其实我们在使用函数传入的多个值或者多个键值对其实都将看做成一个序列或者一个字典。那么反过来,如果我们想要将一个序列或者一个字典转给一个包含几个参数的值或者键值对,我们也可以使用*args或者*kwargs,从而将序列或者字典中的每个元素或者键值对作为一个参数。
代码如下:
def add(num1, num2):
return num1 + num2
li = [1, 2]
add(*li)
# 结果为3