当前位置:

首页 > 编程开发 > Python中Lambda函数的用法和应用

Python中Lambda函数的用法和应用

Lambda函数简介Lambda函数也被称为匿名(没有名称)函数,它直接接受参数的数量以及使用该参数执行的条件或操作,该参数以冒号分隔,并返回最终结果。为了在大型代码库上编写代码时执行一项小任务,或者在函数中执行一项小任务,便在正常过程中使用lambda函数。lambdaargument_list:expersionargument_list是参数列表,它的结构与Python中函数(function)的参数列表是一样的a,ba=1,b=2*args**kwargsa,b=1,*args

本文目录

    Python中Lambda函数的用法和应用

    Lambda 函数简介

    Lambda函数也被称为匿名(没有名称)函数,它直接接受参数的数量以及使用该参数执行的条件或操作,该参数以冒号分隔,并返回最终结果。为了在大型代码库上编写代码时执行一项小任务,或者在函数中执行一项小任务,便在正常过程中使用lambda函数。

    lambda argument_list:expersion

    argument_list是参数列表,它的结构与Python中函数(function)的参数列表是一样的

    a,b
    a=1,b=2
    *args
    **kwargs
    a,b=1,*args
    空
    ....

    expression是一个关于参数的表达式,表达式中出现的参数需要在argument_list中有定义,并且表达式只能是单行的。

    1
    None
    a+b
    sum(a)
    1 if a >10 else 0
    [i for i in range(10)]
    ...

    普通函数和Lambda函数的区别

    • 没有名称Lambda函数没有名称,而普通操作有一个合适的名称。
    • Lambda函数没有返回值使用def关键字构建的普通函数返回值或序列数据类型,但在Lambda函数中返回一个完整的过程。假设我们想要检查数字是偶数还是奇数,使用lambda函数语法类似于下面的代码片段。
    b = lambda x: "Even" if x%2==0 else "Odd"
    b(9)
    • 函数只在一行中Lambda函数只在一行中编写和创建,而在普通函数的中使用缩进
    • 不用于代码重用Lambda函数不能用于代码重用,或者不能在任何其他文件中导入这个函数。相反,普通函数用于代码重用,可以在外部文件中使用。

    为什么要使用Lambda函数?

    一般情况下,我们不使用Lambda函数,而是将其与高阶函数一起使用。高阶函数是一种需要多个函数来完成任务的函数,或者当一个函数返回任何另一个函数时,可以选择使用Lambda函数。

    什么是高阶函数?

    通过一个例子来理解高阶函数。假设有一个整数列表,必须返回三个输出。

    • 一个列表中所有偶数的和
    • 一个列表中所有奇数的和
    • 一个所有能被三整除的数的和

    首先假设用普通函数来处理这个问题。在这种情况下,将声明三个不同的变量来存储各个任务,并使用一个for循环处理并返回结果三个变量。该方法常规可正常运行。

    现在使用Lambda函数来解决这个问题,那么可以用三个不同的Lambda函数来检查一个待检验数是否是偶数,奇数,还是能被三整除,然后在结果中加上一个数。

    def return_sum(func, lst):
     result = 0
     for i in lst:
     #if val satisfies func
     if func(i):
     result = result + i
     return result
    lst = [11,14,21,56,78,45,29,28]
    x = lambda a: a%2 == 0
    y = lambda a: a%2 != 0
    z = lambda a: a%3 == 0
    print(return_sum(x, lst))
    print(return_sum(y, lst))
    print(return_sum(z, lst))

    这里创建了一个高阶函数,其中将Lambda函数作为一个部分传递给普通函数。其实这种类型的代码在互联网上随处可见。然而很多人在使用Python时都会忽略这个函数,或者只是偶尔使用它,但其实这些函数真的非常方便,同时也可以节省更多的代码行。接下来我们一起看看这些高阶函数。

    Python内置高阶函数

    Map函数

    map() 会根据提供的函数对指定序列做映射。

    Map函数是一个接受两个参数的函数。第一个参数 function 以参数序列中的每一个元素调用 function 函数,第二个是任何可迭代的序列数据类型。返回包含每次 function 函数返回值的新列表。

    map(function, iterable, ...)

    Map函数将定义在迭代器对象中的某种类型的操作。假设我们要将数组元素进行平方运算,即将一个数组的每个元素的平方映射到另一个产生所需结果的数组。

    arr = [2,4,6,8]
    arr = list(map(lambda x: x*x, arr))
    print(arr)

    我们可以以不同的方式使用Map函数。假设有一个包含名称、地址等详细信息的字典列表,目标是生成一个包含所有名称的新列表。

    students = [
     {"name": "John Doe",
    "father name": "Robert Doe",
    "Address": "123 Hall street"
    },
     {
     "name": "Rahul Garg",
     "father name": "Kamal Garg",
     "Address": "3-Upper-Street corner"
     },
     {
     "name": "Angela Steven",
    "father name": "Jabob steven",
    "Address": "Unknown"
     }
    ]
    print(list(map(lambda student: student['name'], students)))
    >>> ['John Doe', 'Rahul Garg', 'Angela Steven']

    上述操作通常出现在从数据库或网络抓取获取数据等场景中。

    Filter函数

    Filter函数根据给定的特定条件过滤掉数据。即在函数中设定过滤条件,迭代元素,保留返回值为True 的元素。Map 函数对每个元素进行操作,而 filter 函数仅输出满足特定要求的元素。

    假设有一个水果名称列表,任务是只输出那些名称中包含字符“g”的名称。

    fruits = ['mango', 'apple', 'orange', 'cherry', 'grapes']
    print(list(filter(lambda fruit: 'g' in fruit, fruits)))

    filter(function or None, iterable) --> filter object

    返回一个迭代器,为那些函数或项为真的可迭代项。如果函数为None,则返回为真的项。

    Reduce函数

    这个函数比较特别,不是 Python 的内置函数,需要通过from functools import reduce 导入。Reduce 从序列数据结构返回单个输出值,它通过应用一个给定的函数来减少元素。

    reduce(function, sequence[, initial]) -> value

    将包含两个参数的函数(function)累计应用于序列(sequence)的项,从左到右,从而将序列reduce至单个值。

    如果存在initial,则将其放在项目之前的序列,并作为默认值时序列是空的。

    假设有一个整数列表,并求得所有元素的总和。且使用reduce函数而不是使用for循环来处理此问题。

    from functools import reduce
    lst = [2,4,6,8,10]
    print(reduce(lambda x, y: x+y, lst))
    >>> 30

    还可以使用 reduce 函数而不是for循环从列表中找到最大或最小的元素。

    lst = [2,4,6,8]
    # 找到最大元素
    print(reduce(lambda x, y: x if x>y else y, lst))
    # 找到最小元素
    print(reduce(lambda x, y: x if x

    高阶函数的替代方法

    列表推导式

    其实列表推导式只是一个for循环,用于添加新列表中的每一项,以从现有索引或一组元素创建一个新列表。之前使用map、filter和reduce完成的工作也可以使用列表推导式完成。然而,相比于使用Map和filter函数,很多人更喜欢使用列表推导式,也许是因为它更容易应用和记忆。

    同样使用列表推导式将数组中每个元素进行平方运算,水果的例子也可以使用列表推导式来解决。

    arr = [2,4,6,8]
    arr = [i**2 for i in arr]
    print(arr)
    fruit_result = [fruit for fruit in fruits if 'g' in fruit]
    print(fruit_result)

    字典推导式

    与列表推导式一样,使用字典推导式从现有的字典创建一个新字典。还可以从列表创建字典。

    假设有一个整数列表,需要创建一个字典,其中键是列表中的每个元素,值是列表中的每个元素的平方。

    lst = [2,4,6,8]
    D1 = {item:item**2 for item in lst}
    print(D1)
    >>> {2: 4, 4: 16, 6: 36, 8: 64}
    # 创建一个只包含奇数元素的字典
    arr = [1,2,3,4,5,6,7,8]
    D2 = {item: item**2 for item in arr if item %2 != 0}
    print(D2)
    >>> {1: 1, 3: 9, 5: 25, 7: 49}

    一个简单应用

    如何快速找到多个字典的公共键

    方法一

    dl = [d1, d2, d3] # d1, d2, d3为字典,目标找到所有字典的公共键
    [k for k in dl[0] if all(map(lambda d: k in d, dl[1:]))]

    例

    dl = [{1:'life', 2: 'is'},
    {1:'short', 3: 'i'},
     {1: 'use', 4: 'python'}]
    [k for k in dl[0] if all(map(lambda d: k in d, dl[1:]))]
    # 1

    解析

    # 列表表达式遍历dl中第一个字典中的键
    [k for k in dl[0]]
    # [1, 2]
    # lambda 匿名函数判断字典中的键,即k值是否在其余字典中
    list(map(lambda d: 1 in d, dl[1:]))
    # [True, True]
    list(map(lambda d: 2 in d, dl[1:]))
    #[False, False]
    # 列表表达式条件为上述结果([True, True])全为True,则输出对应的k值
    #1

    方法二

    # 利用集合(set)的交集操作
    from functools import reduce
    # reduce(lambda a, b: a*b, range(1,11)) # 10!
    reduce(lambda a, b: a & b, map(dict.keys, dl))

    写在最后

    目前已经学习了Lambda函数是什么,以及Lambda函数的一些使用方法。随后又一起学习了Python中的高阶函数,以及如何在高阶函数中使用lambda函数。

    除此之外,还学习了高阶函数的替代方法:在列表推导式和字典推导式中执行之前操作。虽然这些方法看似简单,或者说你之前已经见到过这类方法,但你很可能很少使用它们。你可以尝试在其他更加复杂的函数中使用它们,以便使代码更加简洁。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Python
    相关文章 更多
    python删除一个列表里的重复元素的方法与代码示例
    python删除一个列表里的重复元素的方法与代码示例

    学习如何使用Python高效删除列表中的重复元素。本文提供5种常见方法的代码示例,涵盖保持顺序与不保持顺序的场景,适合初学者和进阶开发者参考。

    Python写接口的步骤及完整代码示例
    Python写接口的步骤及完整代码示例

    详细讲解使用Python编写Web接口的核心步骤与完整代码示例,涵盖环境准备、路由定义、数据校验、服务启动及调试测试方法。

    codex怎么读取word文档及docx文件操作教程
    codex怎么读取word文档及docx文件操作教程

    介绍如何利用编程工具读取和解析Word文档(docx格式),涵盖基础文本提取代码示例、结构化数据处理逻辑,以及处理复杂排版时的技术局限与替代方案。

    怎么在Python中调用C语言代码提升性能
    怎么在Python中调用C语言代码提升性能

    详细讲解在Python中调用C语言代码提升性能的完整实践指南,包含原理分析、编译步骤、ctypes与CFFI具体实现、性能对比及常见陷阱。

    Python与C语言的性能差异及底层原理
    Python与C语言的性能差异及底层原理

    深入解析Python与C语言在执行效率上的数量级差异,从编译机制、变量内存布局、动态类型推断到GIL锁,系统阐明底层核心原理。

    Python和C语言哪个更适合编程入门
    Python和C语言哪个更适合编程入门

    客观对比Python与C语言在心智负担、底层机制与学习反馈上的核心差异,提供清晰有据的选择标准与切实的入门学习路径。

    selenium上传文件教程本地文件路径设置方法
    selenium上传文件教程本地文件路径设置方法

    深入解析Selenium处理文件上传的技术细节,涵盖标准HTML控件的路径直接注入法与非标准控件的系统级模拟方案,提供Windows与Linux环境下的路径设置最佳实践及常见异常排查。

    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景
    大数据开发语言选型:Java对比Scala与Python的优缺点及适用场景

    针对大数据工程场景,系统对比Java、Scala与Python在执行性能、生态结合、开发效率和维护成本上的核心差异,给出清晰的架构选型依据与落地方案。

    langgraph python guide中文入门教程详解
    langgraph python guide中文入门教程详解

    本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

    Windows 安装 Python:从官方入口到虚拟环境的可复现实践
    Windows 安装 Python:从官方入口到虚拟环境的可复现实践

    面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。