python lambda 表达式形式分析

 更新时间:2022年04月02日 16:28:33   作者:yerikyu  
这篇文章主要介绍了python lambda 表达式形式分析,​lambda​​表达式会创建一个函数对象,可以对其赋值并如同普通函数一样使用,下面通过定义了一个求平方的 lambda 表达式展开主题内容,需要的朋友可以参考一下

前言:

在日常开发的过程中,有时候会临时用到一些简单的函数,她们的业务逻辑会相对简单,简单到并不值得让他们留下名字,这个时候,就很值得使用匿名函数 lambda函数来完成这个需求。

lambda表达式格式

lambda arguments : statement

表达式以​​ lambda​​关键字开头,冒号 ":" 左侧是函数的传入参数,当有多个入参时使用逗号划分开,冒号右侧是返回值的表达式语句,函数会根据表达式计算结果并将其返回。​​lambda​​表达式会创建一个函数对象,可以对其赋值并如同普通函数一样使用。下面定义了一个求平方的 lambda 表达式:

>>> lambda x : x * x
<function <lambda> at 0x000001C98ED8E040>

其中x是该函数的参数,冒号后面的表达式是函数的返回值,你能一眼看出这个函数就是是在求该变量的平方,但作为一个函数,没有名字如何使用呢?
这里我们暂且给这个匿名函数绑定一个名字,这样使得我们调用匿名函数成为可能。

>>> square = lambda x : x * x
>>> square
<function <lambda> at 0x000001C98F24B040>
>>> square(8)
64

它等同于常规函数

>>> def square(x: int) -> int:
... return x * x
...
>>> square
<function square at 0x000001C98ED8E040>
>>> square(8)
64

通过这个例子可以很明显观察到,lambda表达式和普通函数表达式在表现上的区别,lambda声明之后在python虚拟机中是记录为lambda,而普通函数会吧函数名直接体现出来,试想当发生异常的时候,​​Traceback​​打印了异常信息,但是不标记准确位置,也不跟你说哪个函数出问题,这样排错效率将极大的降低。

>>> div1 = lambda x : 1 / x
>>> div1(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
ZeroDivisionError: division by zero
>>> def div2(x: int) ->int:
... return 1 / 0
...
>>> div2(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in div2
ZeroDivisionError: division by zero

如代码所示,对于div1来说,发生异常了,之跟你说你写的某个lambda函数有异常,而且是在它的第一行,但就不跟你说是哪个函数:),但对于div2来说,就会很直接的说明,div2的第二行出问题了,这很容易定位啊,喏,这也很直观的暗示我们,写lambda不能太复杂,要尽最大努力的令其简洁,永不出错,如果有可能会有异常发生,倒还不如写成普通函数来的痛快。这个以上《Effective Python》所提倡的:使用辅助函数来取代复杂的表达式,并赋予函数清晰的名称以提高代码可读性。

匿名的用法

对于lambda来说,更多时候是用在高阶函数中,将其自己作为参数传入高阶函数中,比如在mapfilterreduce 函数,这些函数接收一个函数作为参数,如果不想额外定义函数,那么使用 lambda 表达式创建匿名函数就是最佳的应用场景。

>>> list(map(lambda x : x * x, [1, 2, 3, 4, 5, 6, 7, 8]))
[1, 4, 9, 16, 25, 36, 49, 64]
>>> list(filter(lambda x : x < 2, [1, 2, 3, 4, 5, 6, 7, 8]))
[1]
>>> reduce(lambda x, y: x + y, [1, 2, 3, 4, 5, 6, 7, 8])
36

python lmabda 形式分析_lambda表达式

到此这篇关于python lambda 表达式形式分析的文章就介绍到这了,更多相关python lambda内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python利用FFmpeg处理音视频的详细教程

    Python利用FFmpeg处理音视频的详细教程

    FFmpeg是一个功能强大的开源多媒体处理工具,能够处理几乎所有类型的音频和视频文件,在Python中,通过ffmpeg-python库,我们可以轻松地在Python脚本中调用FFmpeg的功能,本教程将详细介绍如何在Python中使用ffmpeg-python库,并通过实际案例展示其用法,需要的朋友可以参考下
    2024-08-08
  • 一文详解Python中数据清洗与处理的常用方法

    一文详解Python中数据清洗与处理的常用方法

    在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下
    2025-01-01
  • Python2.7版os.path.isdir中文路径返回false的解决方法

    Python2.7版os.path.isdir中文路径返回false的解决方法

    这篇文章主要为大家详细介绍了Python2.7版os.path.isdir中文路径返回false的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • python3实现飞机大战

    python3实现飞机大战

    这篇文章主要为大家详细介绍了python3实现飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • Python用户自定义异常的实现

    Python用户自定义异常的实现

    这篇文章主要介绍了Python用户自定义异常的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • PyTorch深度学习模型的保存和加载流程详解

    PyTorch深度学习模型的保存和加载流程详解

    PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch,这篇文章主要介绍了PyTorch模型的保存和加载流程
    2021-10-10
  • 基于python的MD5脚本开发思路

    基于python的MD5脚本开发思路

    这篇文章主要介绍了基于python的MD5脚本,通过 string模块自动生成字典,使用permutations()函数,对字典进行全排列,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • numpy数组之存取文件的实现示例

    numpy数组之存取文件的实现示例

    这篇文章主要介绍了numpy数组之存取文件的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python批量操作Excel文件详解

    Python批量操作Excel文件详解

    因为博主所在的地方,需要每周整理全校的青年大学习数据,Excel操作本身不难,但是这种毫无意义的体力劳动做久了就会很无趣,刚好我想起来上学期接触过Python,想着能不能试一下,取代这种无意义的劳动
    2021-11-11
  • 学生如何注册Pycharm专业版以及pycharm的安装

    学生如何注册Pycharm专业版以及pycharm的安装

    这篇文章主要介绍了学生如何注册Pycharm专业版以及pycharm的安装,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论