学习Python中的 Lambda函数

1,104 阅读3分钟

Python Lambda Functions

Lambda表达式是一种在Python中快速创建匿名函数的方法。一个匿名函数就像一个一次性使用的函数,没有名字。你只需使用它一次,然后在程序中继续前进。Lambda 函数通常与 map() 和[filter()]结合使用。lambda函数的方法可以方便地以速记的形式快速定义一个可以与这些函数一起使用的函数。在本教程中,我们将介绍几个例子,说明如何在 Python 中定义 lambda 函数,以及如何有效地利用它们。


从函数到Lambda

一个Lambda函数只是普通Python函数的一个速记版本。所以为了更好地理解如何在Python中制作一个lambda函数,我们可以按部就班地将一个普通函数转换成一个lambda函数。首先,让我们看一个标准 Python 函数的简单例子。

def plus_one(num):
    result = num + 1
    return result
plus_one(7)
8

去掉了 result变量

我们可以简单地返回这个计算结果,而不是取num变量,加一,然后储存在结果中。

def plus_one(num):
    return num + 1
plus_one(7)
8

让函数成为一个单行代码

现在我们可以通过在一行中进行计算来进一步简化该函数。

def plus_one(num): return num + 1
plus_one(7)
8

删除 def关键字

在这里,我们把def关键字和我们分配给我们的函数**(def plus_one()**)的名称和小括号一起删除。

num: return num + 1

删除 return关键字

兰姆达函数没有返回语句,因为任何兰姆达函数都会隐含返回语句。

num: num + 1

添加lambda关键词

最后,我们可以在剥离后的表达式前面加上lambda关键字,瞧!这就是一个lambda函数。我们就有了一个lambda函数。

lambda num: num + 1

将Lambda分配给一个变量

为了利用lambda函数,你经常会把它与其他函数如map()或filter()结合起来使用。它也通常与reduce()函数一起使用。我们稍后再看这个。然而,你使用lambda的第一种方式是简单地将它赋值给一个变量,然后将该变量用作一个函数。让我们看看这是怎么做的。

plus_one = lambda num: num + 1
plus_one(7)
8

使用一个 lambda函数与 map()

map()函数的第一个参数总是一个函数本身。它被称为转换函数。下面是一个使用map()的lambda的例子。

nums = [1, 2, 3, 4, 5]

result = map(lambda x: x * 2, nums)

print(list(result))
[2, 4, 6, 8, 10]

使用一个 lambda函数与 filter()

filter()函数创建了一个函数返回真值的元素的列表。它经常与lambda表达式一起使用。这里有一个例子,我们只想要大于3的数字。

nums = [1, 2, 3, 4, 5]

result = filter(lambda x: x > 3, nums)

print(list(result))
[4, 5]

使用一个 lambda函数与 reduce()

reduce()函数对一个列表中的连续数值对进行滚动计算。一个常见的例子是对一个列表中的所有值进行求和,所以让我们在我们简单的数字列表上试试。

from functools import reduce

nums = [1, 2, 3, 4, 5]

result = reduce(lambda x, y: x + y, nums)

print(result)
15

if语句与lambda

你能用 lambda 函数使用 Python 的if语句吗?为什么是的,你可以。让我们看一个例子。

result = map(lambda str: str.capitalize() if 'a' in str else str, 'abracadabra')

print(list(result))
['A', 'b', 'r', 'A', 'c', 'A', 'd', 'A', 'b', 'r', 'A']

Python Lambda 函数总结

  • Lambdas 是单行函数。
  • 也被称为匿名函数。
  • 通常在你不想在程序中两次使用一个函数时使用。
  • 它的工作方式和普通函数一样,甚至行为也和它们一样。
  • lambda的主体是一个单一的表达式,而不是一个语句块。
  • 快速制作临时性的函数,而不需要正确定义一个函数,使用 def.
  • lambda是为编码简单的函数而设计的。
  • 正式的def函数应该用于更大的任务。