Python札记24_lambda、map

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
image.png

通过lambda函数怎么实现呢?

lam = lambda x: x+2
lst = []
for i in numbers:   #  numbers还是上面的例子
    lst.append(lam(i))

lst
Python札记24_lambda、map_第1张图片
image.png
res = lambda x, y: x + y   # 两个参数形式
res(2, 5)
image.png
res = lambda x,y: x**y    # 先定义两个参数和一个函数
z = 5  # z看做其中的一个参数
[res(z, i) for i in range(z)]   # 将两个参数带入函数中
image.png

lambda总结

  • lambda后面直接跟上变量
  • 变量后面是冒号
  • lambda函数可以接受多个参数,包含可选参数
  • 冒号后面是表达式,表达式计算的结果就是本函数的返回值
  • lambda是单行函数,实际性能并没有提升,仅供选择使用

map

上面lambda函数中的例子通过map函数实现

def add(x):
    x += 2  # x自加2
    return x

numbers = list(range(10))
list(map(add, numbers))   # 先通过定义的函数实现
Python札记24_lambda、map_第2张图片
image.png
list(map(lambda x: x+2, numbers))
image.png
items = list(range(10))
squared = []
for i in items:   # for遍历完成
    squared.append(i*2)
    
squared
Python札记24_lambda、map_第3张图片
image.png

map实现

def square(x):
    return x*2

list(map(square, items))   # map函数实现,两个参数中前面是函数,后面是序列
Python札记24_lambda、map_第4张图片
image.png
list1 = range(1, 6)
list2 = range(6, 11)
list(map(lambda x, y: x + y, list1, list2))   # 将两个list中的对象一次相加
image.png

for遍历循环实现

list1 = range(1, 6)
list2 = range(6, 11)
list3 = []
for i in range(len(list1)):
    list3.append(list1[i]+list2[i])
    
list3
Python札记24_lambda、map_第5张图片
image.png
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
Python札记24_lambda、map_第6张图片
image.png
list(map(lambda x, y, z: x+y+z, list1, list2, list3))
image.png

map总结

  • 基本样式:map(func, seq)
  • func是一个函数对象,seq是序列对象
  • 执行:可迭代序列对象seq中的元素,依次取出来放入函数func对象进行执行,相当于是for循环。
  • 如果lambdamap函数同时存在,注意参数和序列之间一一对应的关系。
  • 返回值被放入一个列表list中。

你可能感兴趣的:(Python札记24_lambda、map)