Python匿名函数 lambda表达式

当我们在创建函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。这省去了我们挖空心思为函数命名的麻烦,也能少写不少代码,很多编程语言都提供这一特性。

Python语言使用lambda关键字来创建匿名函数。

为什么要用匿名函数?

  1. 程序一次性使用,不需要定义函数名,节省内存中变量定义空间
  2. 让程序更加简洁

格式

lambda arg, arg2, ... argN : expression using args

规则

  1. 必须有返回值
  2. 不能有return
  3. 可以零到多个参数

带参数匿名函数

>>> lambda x: x**3 #一个参数
>>> lambda x,y,z:x+y+z #多个参数

>>> lambda x,y=3: x*y #允许参数存在默认值

匿名函数调用

>>> c = lambda x,y,z: x*y*z
>>> c(2,3,4)
24

lambda返回的值,结合map,filter,reduce使用

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

>>> filter(lambda x:x%3==0,[1,2,3,4,5,6])
[3, 6]
#等价于下面的列表推导式
>>> l = [x for x in [1,2,3,4,5,6] if x%3==0]
>>> l
[3, 6]

reduce()函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

>>> reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数
15

map(fun,[arg]+)函数最少有两个参数,第一参数为一个函数名,第二个参数是对应的这个函数的参数(一般为一个或多个list)

>>>def fun(x,y,z):
...     return x*y*z
...
>>>list(map(fun,[1,2,3],[1,2,3],[1,2,3]))
>>>[1,8,27]

>>>s = [1,2,3]
>>>list(map(lambda x,y,z:x*y*z ,s,s,s))
>>>[1,8,27]

你可能感兴趣的:(Python匿名函数 lambda表达式)