Python高级语法(17)map,filter,reduce,zip,lambda的应用

Python高级语法(1)-抽象类

Python高级语法(2)-多继承和MRO继承机制

Python高级语法(3)-global和nolocal关键字使用详解

Python高级语法(4)-魔法函数__init__/__del__/__new__

Python高级语法(5)-魔法函数__str__/__repr__即str和repr的联系与区别的本质

Python高级语法(6)-魔法函数__len__和__contains__即in和len()的本质

Python高级语法(7)-魔法函数__getitem__/__setitem__/__delitem__即字典通过key取值赋值等本质

Python高级语法(8)-魔法函数__enter__/__exit__即with上下文管理器的本质

Python高级语法(9)-魔法函数__call__让对象像函数一样调用

Python高级语法(10)-魔法函数__getattr__/__setattr__/__delattr__/__getattribute__对属性设置查询等的底层拦截处理

Python高级语法(11)-多线程、多进程、协程简介与选择

Python高级语法(12)编码规范即pep8详解

Python高级语法(13)python中的一切皆对象

Python高级语法(14)type、object和class的关系

Python高级语法(15)装饰器

Python高级语法(16)迭代器

Python高级语法(17)map,filter,reduce,zip,lambda的应用

map,filter,reduce,zip都是处理序列的便捷的内置函数

1 map(func,iterable)

map的作用主要是将一个函数应用于一个可迭代的序列,然后将返回值返回

a=[1,2,3,4,5,6]
def func(x):
    return x*x

b=map(func,a)
print(list(b))

运行结果为:

[1, 4, 9, 16, 25, 36]

2 filter(func,iterable)

filter的功能是通过func来对可迭代的序列进行过滤,如果func的返回值为真,则对应的iterable中的值保留下来,最后一起以序列的形式返回

a=[1,2,3,4,5,6]
def func(x):
    return x%2==0

b=filter(func,a)
print(list(b))

执行结果如下所示:

[2, 4, 6]

3 reduce(func,iterable)

reduce 的功能是股东计算应用于可迭代序列iterable的结果,最后将结果返回,非常适合应用类似累加和累乘的场景

from functools import reduce

a=[1,2,3,4,5,6]
def add(x,y):
    return x+y

def multi(x,y):
    return x*y
b=reduce(add,a)
c=reduce(multi,a)
print(b)
print(c)

执行结果如下:

21
720

4 zip(*iterable)

zip的功能是映射多个容器的相似索引,可以方便用于来构造字典

a=[1,2,3,4,5]
b=["a","b","c","d","e"]
c=dict(zip(b,a))
print(c)

执行结果为:

{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

灵活地应用这几个内置函数,有时候可以是代码更加简洁

5 匿名函数

lambda 表达式其实就是匿名函数,在很多比如定义一个函数,函数的功能比较简单同时又只会用一次,这时候如果像普通定义函数那样定义,总会有种不划算的感觉,这时候匿名函数的作用就来了,通过使用lambda表示定义个匿名函数,即达到了函数的功能,同时又没有定义函数

为了更好的理解匿名函数,下面先通过一个普通的函数定义来看一下

def add(a,b):
    return (a+b)

temp=add(100,200)
print(temp)

显然,执行结果为300,下面采用lambda表达式来达到同样的效果

f=lambda x,y:x+y
print(f(100,200))

结果同上面定义函数的方式是一样的,lambda表达式其实也挺简单的,冒号前面的就可以理解为参数的形参,冒号后面就可以理解函数的返回值

6 lambda表达式通常和map,filter,zip,reduce等结合起来一起用非常方便

下面看个例子

a=[1,2,3,4,5,6]

print(list(map(lambda x:x*x,a)))

执行结果为:

[1, 4, 9, 16, 25, 36]

代码非常的简洁

在一些开源库中,lambda表达式也经常被使用,所以这里专门把lambda表达式拿出来讲解一下

猜你喜欢

转载自blog.csdn.net/redrose2100/article/details/121298550