课时21:函数:lambda表达式

目录:

  一、lambda表达式

  二、介绍两个BIF:filter()和map()

  三、课时21课后习题及答案

*********************

一、lambda表达式

*********************

Python允许使用lambda关键字来创建匿名函数。

先来定义一个普通的函数:

>>> def ds(x):
    return 2 * x + 1

>>> ds(5)
11

如果使用lambda语句来定义这个函数,就会变成这样:

>>> lambda x : 2 * x + 1
<function <lambda> at 0x00000172968578C8>

Python的lambda表达式语法非常精简,基本语法是在冒号(:)左边放原函数的参数,可以有多个参数,用逗号(,)隔开即可;冒号右边是返回值。在上面的例子中我们发现lambda语句实际上是返回一个函数对象,如果要对它进行使用,只需要进行简单的操作即可:

>>> g=lambda x : 2 * x + 1
>>> g(5)
11

下面演示lambda表达式两个参数的例子:

>>> def add(x,y):
return x + y
>>> add(3,4)
7
>>> g = lambda x , y : x + y
>>> g(3,4)
7

lambda表达式的作用:

(1)Python写一些执行脚本时,使用lambda就可以省下定义函数过程,比如说我们只是需要写个简单的脚本来管理服务器时间,我们就不需要专门定义一个函数然后再写调用,使用lambda就可以使得代码更加精简。

(2)对于一些比较抽象并且整个程序执行下来只需要调用一两次的函数,有时候给函数起个名字也是比较头疼的问题,使用lambda就不需要考虑命名的问题了。

(3)简化代码的可读性,由于普通的屌丝函数阅读经常要跳到开头def定义部分,使用lambda函数可以省去这样的步骤。

*******************************************

二、介绍两个BIF:filter()和map()

*******************************************

 1、filter()

我们研究的第一个内建函数是一个过滤器。我们每天会接触到大量的数据,过滤器的作用就显得非常重要了,通过过滤器,就可以保存你所关注的信息,把其它不感兴趣的东西直接丢掉。那Python如何来实现过滤功能呢?先来看看Python自己的注释:

>>> help(filter)
Help on class filter in module builtins:

class filter(object)
 |  filter(function or None, iterable) --> filter object
 |  
 |  Return an iterator yielding those items of iterable for which function(item)
 |  is true. If function is None, return the items that are true.
 |  
 |  Methods defined here:
 |  
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |  
 |  __iter__(self, /)
 |      Implement iter(self).
 |  
 |  __next__(self, /)
 |      Implement next(self).
 |  
 |  __reduce__(...)
 |      Return state information for pickling.
 |  
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.

大概意思是:filter有两个参数。第一个参数可以是一个函数也可以是None,如果是一个函数的话,则将第二个可迭代数据里的每一个元素作为函数的参数进行计算,把返回True的值筛选出来;如果第一个参数为None,则直接将第二个参数中为True的值筛选出来。举个例子:

>>> temp = filter(None,[1,0,False,True])
>>> list(temp)
[1, True]

利用filter(),尝试写一个筛选奇数的过滤器:

>>> def odd(x):
    return x%2

>>> temp = filter(odd,range(10))
>>> list(temp)
[1, 3, 5, 7, 9]

那现在学习了lambda函数后,完全可以把上述过程转化为一行:

>>> list(filter(lambda x:x%2,range(10)))
[1, 3, 5, 7, 9]

2.map()

map在这里不是地图的意思,在编程领域,map一般作“映射”来解释。map()这个内置函数也有两个参数,仍然的hi一个函数和一个可迭代序列,将序列的每一个元素作为函数的参数进行运算加工,直到可迭代序列每个元素都加工完毕,返回所有加工后的元素构成的新序列。

举个例子:

>>> list(map(lambda x:x*2,range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

*******************************

三、课时21课后习题及答案

*******************************

发表评论