带有实际示例的 Python lambda 函数

已发表: 2021-06-21

Python lambda 函数是那些很小且没有名称定义的函数。 在python中,关键字'def'用于定义一个函数。 但是,在匿名函数的情况下,关键字“lambda”用于定义这些函数。 因此,命名为“lambda 函数。 可能有名称或未分配给功能。

与 python 中的常规函数​​相比,lambda 函数很短。

lambda 函数已添加到 Python、Java、C++、C# 等编程语言的语法中。 虽然它被用作 ML 或 LISP 语言中的核心概念。

本文将重点介绍python lambda函数的概念及其使用。

根据编程语言的类型,lambda 函数可以与以下术语互换使用:

  • 匿名函数
  • Lambda 函数
  • Lambda 表达式
  • Lambda 抽象
  • 拉姆达形式
  • 函数字面量

目录

Lambda 演算

Lambda 计算是基于 Lambda 表达式构建的计算模型。 Lambda 演算基于纯抽象,由 Alonzo Church 形式化。 也称为 lambda 抽象,它指的是由 Alonzo Church 创建的原始模型。

任何计算都可以用这个概念编码。

lambda函数的语法:

在 python 中使用 lambda 函数时使用以下语法。

lambda 参数:表达式

python的 lambda 函数中可以有任意数量的参数 但是函数只能有一个表达式。 这个表达式首先被求值,然后被返回。 在需要函数对象的任何地方都可以使用 lambda 函数。

考虑使用 lambda 定义具有两个参数的匿名函数但未绑定到任何变量的情况:

λx, y: x + y

在这里,两个参数由函数获取并返回总和。

lambda 函数显示了一些特征:

  • lambda 函数的主体中不能有任何语句,但只能包含表达式。
  • 执行代码只有一行。
  • python 中的 lambda 函数不支持类型注释
  • 允许立即调用。

不能使用语句

如前所述,在定义 lambda 函数时不能有任何语句。 如果用户使用 pass、return、raise 或 assert 等语句,则会出现 SyntaxError 异常。 异常的结果可以通过以下代码显示

资源

在上面的代码中,当解析包含函数 lambda 主体中assert语句的代码时,会导致语法错误。

lambda 函数只包含一个表达式

与 python 中的所有标准普通函数相比,python 中的 lambda 函数只能包含一个表达式。 函数 lambda 的主体可以通过使用带括号的多行来使表达式遍布各处。 但是,它仍然是一个单一的表达式。

资源

当存在“奇数”参数时返回字符串“奇数”,而当存在“偶数”参数时返回字符串“偶数”。 上述代码中使用了两行,因为它们在括号内。 但它仍然是一个单一的表达式。

类型注释

随着 python 中“类型提示”的可用性,普通函数现在比 python 中的 lambda 函数更受欢迎。 随着 mypy、pyre 等工具的可用性,可以使用full_name() 捕获类型错误。 在运行时引发与 lambda 函数相关的语法错误。

立即调用函数执行 (IIFE)

该功能不能在 python 解释器之外使用。 python 中 lambda 表达式的定义可以传递给 map() 等高阶函数。

lambda 函数中的参数

python lambda表达式支持不同的方式来传递参数,例如:

  • 位置参数
  • 命名参数也称为关键字参数
  • 参数的变量列表,也称为 varargs。
  • 关键字参数的变量列表
  • 只有关键字的参数。

Python Lambda 表达式中的装饰器

装饰器可以定义为允许将行为添加到类或函数的模式实现。 @decorator的语法用作在 python 中表达装饰器的函数的前缀

只有使用参数 'Python', decorated_function()才会被打印。 打印的附加行为是'调用函数'decorated_function'。

Python 允许向 lambda 函数添​​加装饰器,尽管不需要使用语法@decorator 装饰器充当调用 lambda 函数的函数。

<lambda> 出现在标识 lambda 函数的位置。 而在普通函数的情况下,即add_two,它被清楚地识别出来。

出于调试的目的,可以用这种方式装饰 lambda 函数。

关闭

python 中的 Closure() 被定义为一个函数,其中除了函数中使用的参数之外的自由变量绑定到函数范围内定义的特定值。 我们可以从任何地方调用闭包。 python 中的 Lambda 函数可以充当闭包,就像普通函数充当闭包一样。

使用 lambda 函数

  • 每当我们需要在更短的时间内使用函数时,都会在这种情况下使用 lambda 函数。
  • 对于将函数传递给高阶函数的函数,应用了 lambda 函数。 这些函数作为参数传递给那些高阶函数。
  • python 中的 lambda 函数可以与 map() 等其他内置函数一起使用。

测试 lambda 函数

通过使用 doctest 和 unittest 模块,可以测试 python 中的 lambda 函数:

  • 单元测试模块像常规函数一样测试 lambda 函数。
  • 在 doctest 模块的情况下,python 代码是从docstring中提取的,用于执行测试。 lambda 函数的语法不允许docstring 但是,可以将字符串分配给正在命名的 lambda 的 _doc_ 元素。

Python Lambda 函数示例

在下面的代码中,在返回参数的地方定义了一个名为“identity”的函数。 它通过使用关键字“def”定义为python的标准函数。

>>> def 身份 (x);

..... 返回 x

在这里,x 被函数“identity”作为参数,并在被调用时返回参数。

使用 lambda 编写相同的代码将是:

λx:x

该表达式由三部分组成:作为关键字的 Lambda,作为绑定变量的 x,以及作为代码主体的 X。

  • 绑定变量是指传递给 lambda 函数的参数。 但是,自由变量是那些未绑定并且可以在表达式主体中引用的变量。 常量可以是自由变量或在函数范围内定义的变量。

上式可以详细表述为

>>> λx: x + 1

在这里,函数将参数加 1。 可以将函数添加到参数中,同时通过使用括号将函数和参数括起来。

>>>(λ x: x + 1)(2)

3

为了计算表达式中的值,应用了缩减策略。 就像在上面的例子中,绑定变量“x”可以用参数 2 代替。

(λ x: x + 1)(2) = λ 2: 2 + 1

= 2 + 1

= 3

lambda函数是一个表达式,可以命名,上面的代码可以重写为

>>> add_one = Lambda x : x + 1

>>> add_one(2)

3

这相当于写:

def add_one(x):

返回 x + 1

lambda 函数采用单个参数。 此外,在 python 中定义 lambda 函数时,函数周围没有括号。

为了将多个参数传递给python lambda函数,参数被列出并通过使用逗号 (,) 分隔。 列出参数时不应有括号。 多参数函数的示例如下所示:

这里,full_name 下的 lambda 函数采用两个参数。 插入第一个最后一个参数的函数返回一个字符串代码显示,在定义 lambda 函数时,没有使用任何括号。 调用 lambda 函数的方式与 python 中的标准函数相同,即使用括号括住参数。

带有 filter() 的 Python lambda 函数

在 python 中,函数filter()接受一个参数作为一个列表和一个函数。 通过列表中的项目,可以调用返回新项目列表的函数。 这个新创建的列表的函数被评估为True

filter()函数的示例如下所示,用于过滤列表中包含的偶数。

资源

程序生成的输出是新列表:[4, 6, 8, 12]。

带有 map() 的 Python lambda 函数

在 python map() 函数中,一个列表和一个函数被作为参数。 列表中包含的所有项目都调用该函数,该函数返回一个新创建的列表,其中包含该函数返回的项目。

结论

Python lambda 函数是那些单行且没有名称声明的函数,即匿名函数。 可以将多个参数传递给只能有一个表达式的 lambda 函数。 有时,lambda 函数可以作为参数传递给其他函数。 在 python 中使用关键字 'def' 定义的函数可以作为常规函数。

因此,本文解释了 Python 中 lambda 函数的概念、它们与其他函数的应用以及一些示例。 如果您对获得编程语言专业知识和掌握编码技能进一步感兴趣,可以查看upGrad提供的“数据科学执行 PG 计划”课程。 它专为 21 至 45 岁的所有希望在数据科学领域获得编码技能的入门级专业人士而设计。 如果您愿意朝着梦想迈出一步,请挺身而出,看看课程的好处。 通过实践行业项目,IIIT-B 提供的课程旨在满足您的需求,让您为即将到来的顶级行业做好准备。

普通函数和 lambda 函数有什么区别?

我们知道 Python 中的函数是使用 def 关键字定义的。 类似地,lambda 函数是使用 lambda 关键字定义的。 考虑以下示例以深入了解两者之间的区别:
# 正常函数 def sq(x): return x*x # Lambda 函数 lambda_sq = lambda x: x*x # 调用正常 # 定义函数 print(sq(10)) # 使用 lambda 函数 print(lambda_sq(10)) }
上面的示例说明了计算数字平方的 2 个函数。 如果没有 lambda,我们必须创建一个函数 sq(x),然后返回平方。 另一方面,使用 lambda,整个函数已经简化为一行。 Lambda 不需要 return 语句。