Python札记24_lambda、map
2019-06-30 本文已影响1人
皮皮大
在
Python
中有几个特殊的函数,它们能够进行函数式的编程。在函数式编程中,一个程序会被看做是一个无状态的函数计算的串行。本文中讲解前2个特殊函数:
- lambda
- map
- filter
- reduce
- zip
lambda
lambda
函数在Python
中是一个神奇的函数,只用一个代码就可以解决很多的问题,通过一个例子来体现下lambda
函数的神奇之处:
下面是通过定义一个add
函数来实现加法的功能
def add(x):
x += 2 # x自加2
return x
numbers = list(range(10))
new_numbers = []
for i in numbers:
new_numbers.append(add(i))
new_numbers
通过for语句的列表解析式
来实现:好像也很厉害的样子
new_numbers = [x + 2 for x in list(range(10))] # 可以不带list,for循环遍历的对象有next方法即可
new_numbers

通过lambda函数怎么实现呢?
lam = lambda x: x+2
lst = []
for i in numbers: # numbers还是上面的例子
lst.append(lam(i))
lst

res = lambda x, y: x + y # 两个参数形式
res(2, 5)

res = lambda x,y: x**y # 先定义两个参数和一个函数
z = 5 # z看做其中的一个参数
[res(z, i) for i in range(z)] # 将两个参数带入函数中

lambda总结
-
lambda
后面直接跟上变量 - 变量后面是冒号
-
lambda
函数可以接受多个参数,包含可选参数 - 冒号后面是表达式,表达式计算的结果就是本函数的返回值
-
lambda
是单行函数,实际性能并没有提升,仅供选择使用
map
上面lambda函数中的例子通过map函数实现
def add(x):
x += 2 # 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: # for遍历完成
squared.append(i*2)
squared

map实现
def square(x):
return x*2
list(map(square, items)) # map函数实现,两个参数中前面是函数,后面是序列

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]) # 3层相加更简洁
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
中。