Python基础(十六)——Lambda 表达式

目录

  • 1、Lambda 表达式是什么
  • 2、和def所定义的python函数的区别
  • 3、Lambda 表达式的定义
  • 3、Lambda 表达式的特点
  • 4、Lambda 表达式中用三目运算语句
  • 5、lambda的参数形式
    • 5.1、Lambda 表达式直接调用。
    • 5.2、无参数
    • 5.3、一个参数
    • 5.3、默认参数
    • 5.4、可变参数:**args
    • 5.5、可变参数:**kwargs
  • 6、排序中使用lambda表达式
    • 6.1、列表排序(使用 Lambda 表达式)
      • 6.1.1、列表排序(不指定 key)
      • 6.1.2、列表排序(指定 key)
      • 6.1.3、列表排序
      • 6.1.4、列表内嵌套列表排序(使用 Lambda 表达式)。
    • 6.2、字典排序
      • 6.2.1、字典排序(键(key)排序)
      • 6.2.2、字典排序(值(value)排序)(使用 Lambda 表达式)
      • 6.2.3、字典内嵌套字典排序(使用 Lambda 表达式)
  • 7、lambda表达式作为map ()的第一参数
  • 8、lambda表达式作为filter ()的第一参数

1、Lambda 表达式是什么

lambda表达式其实就是Python的一个函数语法一样。所以也称为匿名函数。
所谓匿名函数,通俗地说就是没有名字的函数。
基本功能跟使用def所定义的python函数是一样的。
但是、和def所定义的区别是:

lambda表达式基本在一行以内就完整的表达了整个函数的运算逻辑。

我们直接看 和def的对应关系你就明白了。

2、和def所定义的python函数的区别

具体的,我们看一下def语句的函数定义与相应的lambda表达式之间的对应关系,你就能明白。

def 函数名(参数1, 参数2, ...):return 返回值函数名 = lambda 参数1, 参数2, ...: 返回值

注意:Lambda 表达式中 lambda 在oython中是个关键字。

我们看实例:

# def定义的加法函数
def add_def(a, b=1):return a + b# Lambda 表达式:定义的加法函数
# 这里为了区分方便阅读,函数名不太一致。
add_lambda = lambda a, b=1: a + b

实际的代码结果:

def add_def(a, b=1):return a + badd_lambda = lambda a, b=1: a + bprint(add_def(4, 4))      # 8print(add_def(4))         # 5print(add_lambda(4, 4))   # 8print(add_lambda(4))      # 5

对应关系你很清楚理解 Lambda 表达式是什么了。
现在我们看看 Lambda 表达式的定义。

3、Lambda 表达式的定义

lambda parameters: expression
  • lambda:关键字
  • parameters:参数列表,是可选的。参数列表的参数个数可以是零个或者多个,如果有多个,则用逗号分隔;其规则跟普通函数的规则一致,但不需要用括号。
  • expression是一个估值表达式,这个表达式的估值结果就是lambda函数的返回值。expression不能包含分支或者循环(但可以是三目运算语句),也不能包含return或者yield语句。

所谓估值表达式,就是最终能被运算成一个值的表达,例如常量、变量、运算表达式、函数调用、列表切片,等等。

※关于【3、Lambda 表达式的定义】内容来自知乎作者:Python3基础:lambda表达式

虽然 Lambda 表达式 和def定义的函数 是一样的,但是Lambda 表达式 的使用是根据自己特点有限制的。
我们接下来看一下Lambda 表达式的特点。

3、Lambda 表达式的特点

  1. 参数不受限,以接收任意多个参数 (包括可选参数)
    参数列表的参数个数可以是零个或者多个,如果有多个,则用逗号分隔;其规则跟普通函数的规则一致,但不需要用括号。

例:有四个参数,逗号隔开

add_lambda = lambda a, b, c=1, d=2: a + b + c + dprint(add_lambda(4, 4))           # 11print(add_lambda(4, 4, 4, 4))     # 16
  1. 功能简单。
    单行expression决定了lambda函数不可能完成复杂的逻辑,只能完成非常简单的功能。所有的函数逻辑必须一行之内完成。

  2. 表达式有唯一性。
    lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的运算结果就是函数的返回值。
    因为最终结果一定要被运算成一个值,例如常量、变量、运算表达式、函数调用、列表切片,等等。

也真因为第三个特点:最终结果一定要被运算成一个值
因此基于这个特点,Lambda 表达式中可以包含三目运算语句,因为三目运算语句的结果就是一个值。

4、Lambda 表达式中用三目运算语句

关于三目运算语句请参照:三目运算语句

直接上代码:

get_odd_even = lambda x: '偶数' if x % 2 == 0 else '奇数'print(get_odd_even(3))
# 奇数print(get_odd_even(4))
# 偶数

等价以下语句:

def get_odd_even(x):if x % 2 == 0:str = "偶数"else:str = "奇数"return strprint(get_odd_even(3))
# 奇数print(get_odd_even(4))
# 偶数

5、lambda的参数形式

5.1、Lambda 表达式直接调用。

直接看示例:

print((lambda a, b: a + b)(1, 2))    # 3

5.2、无参数

print((lambda: 100)())     # 100

5.3、一个参数

print((lambda a: a)('hello world'))    # hello world

5.3、默认参数

print((lambda a, b, c=100: a + b + c)(10, 20))    # 130

5.4、可变参数:**args

返回值是个元组。

print((lambda *args: args)(10, 20, 30))    # (10, 20, 30)

5.5、可变参数:**kwargs

返回值是个字典。

print((lambda **kwargs: kwargs)(name='python', age=20))     # {'name': 'python', 'age': 20}

主要介绍 sorted(),sort(),max(),min()参数key中使用 Lambda 表达式。

6、排序中使用lambda表达式

6.1、列表排序(使用 Lambda 表达式)

6.1.1、列表排序(不指定 key)

TestList = ['Charle', 'Bob', 'Alice']TestListSorted = sorted(TestList)print(TestListSorted)
# ['Alice', 'Bob', 'Charle']

6.1.2、列表排序(指定 key)

本例:在参数key中指定返回字符数的内置函数 len(),从而按字符数降序排序。

TestList = ['Charle', 'Bob', 'Alice']TestListSorted = sorted(TestList, key=len)print(TestListSorted)
# ['Bob', 'Alice', 'Charle']

6.1.3、列表排序

这时我们把 key 执行成 Lambda 表达式。可以将任意函数应用于各元素,并根据其结果进行排序。
例如,当将用于获取第二个字符的lambda表达式【lambda x: x[1]】指定为key时,按照第二个字符的字母顺序进行排序。
下面示例可以看的更清楚:
1、首先我们要知道:

lambda x: x[0]

是在取列表各个元素对应下标的值。

print((lambda x: x[0])([1, 2, 3]))     # 1
print((lambda x: x[1])([1, 2, 3]))     # 2
print((lambda x: x[2])([1, 2, 3]))     # 3print((lambda x: x[0])('ABC'))         # A
print((lambda x: x[1])('ABC'))         # B
print((lambda x: x[2])('ABC'))         # C

2、所以我们直接看例子:

TestList = ['CEG', 'BFH', 'ADI']# 以列表中列表的第一个字母排序
print(sorted(TestList, key=lambda x: x[0]))
# ['ADI', 'BFH', 'CEG']# 以列表中列表的第二个字母排序
print(sorted(TestList, key=lambda x: x[1]))
# ['ADI', 'CEG', 'BFH']# 以列表中列表的第三个字母排序
print(sorted(TestList, key=lambda x: x[2]))
# ['CEG', 'BFH', 'ADI']

6.1.4、列表内嵌套列表排序(使用 Lambda 表达式)。

Testlist = [[4, 2, 9], [1, 5, 6], [7, 8, 3]
]# 以列表中列表的第一个数排序
print(sorted(Testlist, key=lambda x: x[0]))
# [[1, 5, 6], [4, 2, 9], [7, 8, 3]]# 以列表中列表的第二个数排序
print(sorted(Testlist, key=lambda x: x[1]))
# [[4, 2, 9], [1, 5, 6], [7, 8, 3]]# 以列表中列表的第三个数排序
print(sorted(Testlist, key=lambda x: x[2]))
# [[7, 8, 3], [1, 5, 6], [4, 2, 9]]# 以列表中列表的第一个数排序,且降序
print(sorted(Testlist, key=lambda x: x[0], reverse=True))
# [[7, 8, 3], [4, 2, 9], [1, 5, 6]]

6.2、字典排序

6.2.1、字典排序(键(key)排序)

dict = {'c': 1, 'b': 2, 'a': 3}print(sorted(dict))
# ['a', 'b', 'c']print(sorted(dict, reverse=True))
# ['c', 'b', 'a']

6.2.2、字典排序(值(value)排序)(使用 Lambda 表达式)

dict = {'c': 1, 'b': 2, 'a': 3}print(sorted(dict, key=lambda x: dict[x]))
# ['c', 'b', 'a']print(sorted(dict, key=lambda x: dict[x], reverse=True))
# ['a', 'b', 'c']

6.2.3、字典内嵌套字典排序(使用 Lambda 表达式)

dict = {'a': {'x': 3, 'y': 2, 'z': 1},'b': {'x': 2, 'y': 1, 'z': 3},'c': {'x': 1, 'y': 3, 'z': 2}}# 以内部字典的'x'对应的值排序
print(sorted(dict, key=lambda x: dict[x]['x']))
# ['c', 'b', 'a']# 以内部字典的'y'对应的值排序
print(sorted(dict, key=lambda x: dict[x]['y']))
# ['b', 'a', 'c']# 以内部字典的'z'对应的值排序
print(sorted(dict, key=lambda x: dict[x]['z']))
# ['a', 'c', 'b']# 以内部字典的'x'对应的值排序,并降序
print(sorted(dict, key=lambda x: dict[x]['x'], reverse=True))
# ['a', 'b', 'c']

7、lambda表达式作为map ()的第一参数

list = [0, 1, 2, 3]map_square = map(lambda x: x**2, list)print(map_square)
# <map object at 0x1072fd128>print(list(map_square))
# [0, 1, 4, 9]

等同于以下语句:

list = [0, 1, 2, 3]l_square = [x**2 for x in list]print(l_square)
# [0, 1, 4, 9]

8、lambda表达式作为filter ()的第一参数

list = [0, 1, 2, 3]filter_even = filter(lambda x: x % 2 == 0, list)print(list(filter_even))
# [0, 2]

等同于:

list = [0, 1, 2, 3]l_even = [x for x in list if x % 2 == 0]print(l_even)
# [0, 2]

如果有问题,请指出,或者copy了谁的,也请指出。
会及时更正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/49241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序教学系列(4)

微信小程序教学系列 第四章&#xff1a;小程序优化与调试 1. 性能优化技巧 在开发微信小程序时&#xff0c;我们可以采取一些性能优化技巧&#xff0c;以提升小程序的性能表现和用户体验。以下是一些常用的性能优化技巧&#xff1a; 减少网络请求&#xff1a;尽量合并网络请…

〔016〕Stable Diffusion 之 模型工具箱和图片背景移除 篇

✨ 目录 &#x1f388; 下载插件&#x1f388; 基础使用界面&#x1f388; 高级使用界面&#x1f388; 下载背景移除插件&#x1f388; 移除插件使用 &#x1f388; 下载插件 由于模型很多&#xff0c;而且底模也非常大&#xff0c;对于空间占用比较大&#xff0c;如果想缩小模…

07-Vue基础之综合案例——小黑记事本

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a;懒惰受到的惩罚不仅仅是自己的失败&#xff0c;还有别人的成功。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章…

IGBT基本工作原理及IGBT的作用是什么?

IGBT 今天我们一起来了解关于IGBT&#xff08;绝缘栅双极性晶体管&#xff09;芯片。在过去的几十年中&#xff0c;我们生活的每个角落都离不开能源的驱动。然而&#xff0c;传统的功率晶体管却受限于一些方面不足。幸运的是&#xff0c;IGBT芯片的出现彻底改变了这一局面。 …

游戏出海工具都有哪些?

游戏出海是一个复杂的过程&#xff0c;需要运用多种工具来进行市场分析、推广、本地化等工作。以下是一些常用的游戏出海工具&#xff1a; 一、必备工具&#xff1a; 1、游戏平台&#xff1a;要想进行游戏出海运营&#xff0c;游戏平台时必不可少的&#xff0c;选择游戏平台时…

【Spring Boot】四种核心类的依赖关系:实体类、数据处理类、业务处理类、控制器类

//1.配置项目环境&#xff0c;创建Spring Boot项目。 //2.数据库设置&#xff0c;配置数据库。 //3.创建实体类&#xff0c;映射到数据库。 //4.创建数据处理层类&#xff0c;Repository //5.创建业务处理类&#xff0c;Service类 //6.创建控制器类&#xff0c;Controller类 Ar…

centos mysql8解决Access denied for user ‘root‘@‘localhost‘ (using password: YES)

环境 系统&#xff1a;CentOS Stream release 9 mysql版本&#xff1a;mysql Ver 8.0.34 for Linux on x86_64 问题 mysql登录提示 Access denied for user rootlocalhost (using password: YES)解决方法 编辑 /etc/my.cnf &#xff0c;在[mysqld] 部分最后添加一行 skip-…

psycopg2 使用dbutils 工具封装

1.什么是dbutils Dbutils是一套工具&#xff0c;可为数据库提供可靠&#xff0c;持久和汇总的连接&#xff0c;该连接可在各种多线程环境中使用。 2.使用代码记录 db_config.py 数据库配置类&#xff1a; # -*- coding: UTF-8 -*- import psycopg2# 数据库信息 DB_TEST_HO…

docker 安装 redis

目录 1、下载镜像文件 2、创建实例并启动 3、使用 redis 镜像执行 redis-cli 命令连接 4、redis持久化操作 5、然后按照第3点&#xff0c;再试一试&#xff0c;看看redis持久化是否配置成功。 6、最后与redis可视化工具测试连接 大家先 su root&#xff0c;这让输入命令就…

GEE/PIE遥感大数据处理与典型案例

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

Docker Nginx 运行多个前端项目

运行Nginx容器&#xff1a; docker run -itd --name nginxWeb -p 80:80 -p 8081:8081 nginx:latest--name是容器名称变量&#xff0c;nginx是创建容器的名称 -p 端口映射&#xff0c;新增一个8081的端口映射&#xff0c;如果配置的是域名可以公用80端口 copy 打包后的前端项目…

electron在最小化窗口后,任务栏右键关闭再托盘唤起黑屏的解决方法

在点击托盘唤醒的回调函数下我的代码是这样的&#xff1a; public showWindow (): void > {this.mainWindow.restore();}因为我想要最小化后再唤醒可以回到原始窗口状态&#xff0c;比如最大化。但是这么唤醒后会导致页面黑屏&#xff0c;在找了很多文档无果。最后在我试验…

23种设计模式攻关

&#x1f44d;一、创建者模式 &#x1f516;1.1、单例模式 单例模式&#xff08;Singleton Pattern&#xff09;&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供全局访问点。 在某些情况下&#xff0c;我们需要确保一个类只能有一个实例&#xff0c;比如数据库连接…

22 从0到1:API测试怎么做?常用API测试工具简介

API 测试的基本步骤 准备测试数据&#xff08;可选&#xff0c;不一定所有 API 测试都需要这一步&#xff09;&#xff1b;通过 API 测试工具&#xff0c;发起对被测 API 的 request&#xff1b;验证返回结果的 response。 Postman操作步骤 发起 API 调用&#xff1b;添加结…

LSTM模型

目录 LSTM模型 LSTM结构图 LSTM的核心思想 细胞状态 遗忘门 输入门 输出门 RNN模型 LRNN LSTM模型 什么是LSTM模型 LSTM (Long Short-Term Memory)也称长短时记忆结构,它是传统RNN的变体,与经典RNN相比能够有效捕捉长序列之间的语义关联,缓解梯度消失或爆炸现象.同时LS…

unity 发布报错 The type or namespace name `UnityEditor‘ could not be found.

引用了UnityEditor的内容&#xff0c;发布当然会报错啦 加上宏判断就好啦

SpringCloud学习笔记(四)_ZooKeeper注册中心

基于Spring Cloud实现服务的发布与调用。而在18年7月份&#xff0c;Eureka2.0宣布停更了&#xff0c;将不再进行开发&#xff0c;所以对于公司技术选型来说&#xff0c;可能会换用其他方案做注册中心。本章学习便是使用ZooKeeper作为注册中心。 本章使用的zookeeper版本是 3.6…

SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

一、spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。另外说明spring cloud是基…

国产精品:讯飞星火最新大模型V2.0

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

评测凯迪仕K70「千里眼」智能锁:不忘安全初心,便捷体验更上一层

能打败凯迪仕的&#xff0c;只有它自己。这是我们在体验过凯迪仕最新旗舰产品K70「千里眼」智能锁之后的感受。作为凯迪仕2023年最新旗舰机型&#xff0c;K70「千里眼」智能锁在配置上可以说是「机皇」般的存在。3K超高清智能锁猫眼、车规级24GHz雷达、大小双屏设计、三方可视对…