Python基础灬高阶函数(lambda,filter,map,reduce,zip)

时间:2021-08-17 08:24:50

高阶函数

lambda函数

关键字lambda表示匿名函数,当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。

lambda函数省略函数名,冒号前为参数,冒号后函数体。

# 定义一个取偶数的函数
def even(x):
    for i in x:
        if i % 2 == 0:
            yield i
# 等价于取偶数
lambda x: x % 2 == 0

filter函数

filter(function,iterable)接收一个函数和一个可迭代对象作为参数,过滤iterable中满足function函数的元素。

fi = filter(lambda x: x % 2 == 0, [1, 2, 3, 4])
print(type(fi))
print(list(fi))
# <class 'filter'>
# [2, 4]

map函数

filter(function,iterable)接收一个函数和一个可迭代对象作为参数,将函数作用于iterable中的每一个元素。

m = map(lambda x: x + 1, [1, 2, 3])
print(type(m))
print(list(m))
# <class 'map'>
# [2, 3, 4]

reduce函数

reduce(funtion,iterable)接收一个函数和一个可迭代对象作为参数,将函数结果作为第一个参数,iterable中的下一个元素做第二个参数,做累计计算。

# 等价于求和计算
from functools import reduce
r = reduce(lambda x, y: x + y, [1, 2, 3])
print(r)
# 6

zip函数

zip(*iterable)接收多个可选可迭代对象作为参数,针对每个迭代对象的元素生成新的包含若干元组的一个可迭代对象。

z = zip([1, 2, 3], [4, 5, 6], [7, 8, 9])
print(type(z))
print(list(z))
# <class 'zip'>
# [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

zip(*zip)

zip(*zip)是zip的逆操作。

# 逆操作
z = zip([1, 2], [3, 4], [5, 6])
x, y, q = zip(*z)
print(x, y, q)
# (1, 2) (3, 4) (5, 6)

交换dict的键值

di = {'name': 'jack', 'age': 18}
print(dict(zip(di.values(), di.keys())))
# {'jack': 'name', 18: 'age'}

模块

模块是代码量变得相当大之后,为了将需要重复使用的有组织的代码段放在一起组成一个模块,模块可以被附加到现有程序中,附加的过程叫做导入(import)。

# 导入模块的写法
import 模块名称
form 模块名称 import 方法名