Python之lambda函数:用法与实例

什么是lambda?

Lambda是一种不需要名字(即标识符)、由一个单独表达式成的匿名内联函数,表达式会在调用时被求值。

在Python中,创建 lambda 函数的语法为:

lambda [parameters]: expression

也就是说lambda函数包含三个部分:

  • 关键字lamdbda;
  • 参数;
  • 函数体

lambda函数可以包含任意多的参数,但是函数体部分只能包含一个表达式。

此外,lambda函数用一行代码写成,并且被立即调用。



实例1

代码解释:这里定义了一个用于保存lambda函数的返回值。

  1. lambda关键字用于定义匿名函数;
  2. xy是传递给lambda函数的参数;
  3. 函数体部分将传递进去的两个参数相加,注意这里只能有一个表达式,不可以写多个语句。
  4. 调用函数并打印返回值。

实例2

代码解释

  1. 首先定义了一个字符串,用于传递给lambda函数;
  2. 声明了一个lambda,调用print函数并打印字符串。

但是程序并没有打印传递字符串参数,这是因为lambda返回的是一个函数对象。在这个例子中,lambda并没有被print函数调用,而只是返回函数对象和存储它的内存位置。

实例3

然而,执行如下代码,并输出:

代码解释

  1. 仍然是上面例子中定义的字符串;
  2. 这部分定义了一个lambda函数,并通过传递字符串作为参数立即调用它。这就是所谓的IIFE (immediately invoked function execution): 立即调用函数表达式。第二行代码不是很好理解,可以把第一个括号里面的部分等价于一个名字为fun的函数:(lambda x : print(x))--> fun,这样第二行实际就变成了:fun(x),如前面分析,这里的fun()函数的功能就是打印字符串。所以当把x作为参数传递给他的时候,就打印了该字符串。



与python内置函数一切使用lambda

通过python中的内置函数,如filter()map()等一起使用,可以可方便的实现一些操作。比如:

这行代码首先定义了一个将一个数相加两次的函数,然后把2作为参数传递给这个函数。

函数一旦被定义,就会被立即执行。也就是上面所说的IIFE (immediately invoked function execution): 立即调用函数表达式

lambda函数的这个属性使得人们可以在filter()map()等函数的内部使用它,这在不需要再次使用这些函数的时候是很有用的。

filter()函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
filter()函数的语法:
filter(function, iterable)

例如:

这里首先定义了一个包含数字的列表,然后通过lambda定义一个函数来判断列表中的各个元素是否是大于0的,如果不满足,则过滤掉,由于filter()函数的返回值是迭代器对象,所以需要使用list()函数将其转换为列表。

map()函数

map(function, iterable, ...)函数会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

reduce()函数

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




Python Lambda Functions with EXAMPLES

编辑于 2024-01-16 15:27・IP 属地江苏