在Python
中有几个特殊的函数,它们能够进行函数式的编程。在函数式编程中,一个程序会被看做是一个无状态的函数计算的串行。本文中讲解前2个特殊函数:
lambda
lambda
函数在Python
中是一个神奇的函数,只用一个代码就可以解决很多的问题,通过一个例子来体现下lambda
函数的神奇之处:
下面是通过定义一个add
函数来实现加法的功能
def add(x):
x += 2
return x
numbers = list(range(10))
new_numbers = []
for i in numbers:
new_numbers.append(add(i))
new_numbers
for列表解析
通过for语句的列表解析式
来实现:好像也很厉害的样子
new_numbers = [x + 2 for x in list(range(10))] # 可以不带list,for循环遍历的对象有next方法即可
new_numbers
lambda实现
通过lambda函数怎么实现呢?
lam = lambda x: x+2
lst = []
for i in numbers:
lst.append(lam(i))
lst
res = lambda x, y: x + y
res(2, 5)
res = lambda x,y: x**y
z = 5
[res(z, i) for i in range(z)]
lambda总结
lambda
后面直接跟上变量- 变量后面是冒号
lambda
函数可以接受多个参数,包含可选参数- 冒号后面是表达式,表达式计算的结果就是本函数的返回值
lambda
是单行函数,实际性能并没有提升,仅供选择使用
map
上面lambda函数中的例子通过map函数实现
def add(x):
x += 2
return x
numbers = list(range(10))
list(map(add, numbers))
list(map(lambda x: x+2, numbers))
items = list(range(10))
squared = []
for i in items:
squared.append(i*2)
squared
map实现
def square(x):
return x*2
list(map(square, items))
list1 = range(1, 6)
list2 = range(6, 11)
list(map(lambda x, y: x + y, list1, list2)) # 将两个list中的对象一次相加
for遍历循环实现
list1 = range(1, 6)
list2 = range(6, 11)
list3 = []
for i in range(len(list1)):
list3.append(list1[i]+list2[i])
list3
list1 = range(1, 6)
list2 = range(6, 11)
list3 = range(3, 8)
list4 = []
for i in range(len(list1)):
list4.append(list1[i] + list2[i] + list3[i])
list4
list(map(lambda x, y, z: x+y+z, list1, list2, list3))
map总结
- 基本样式:
map(func, seq)
func
是一个函数对象,seq
是序列对象- 执行:可迭代序列对象
seq
中的元素,依次取出来放入函数func
对象进行执行,相当于是for
循环。 - 如果
lambda
和map
函数同时存在,注意参数和序列之间一一对应的关系。 - 返回值被放入一个列表
list
中。