Python3之lambda表达式和三元运算符

2023-11-03

lambda表达式

lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
lambda是一个表达式而不是一个语句,lambda用来编写简单的函数,不会再重复利用的函数。而def用来处理强大的任务。

lambda就是用来定义一个匿名函数的,如果还要给他绑定一个名字的话,就会显得有点画蛇添足,通常是直接使用lambda函数。lambda表达式中“:”前面的为参数,后面的为返回值。如下所示:
 

add = lambda x, y: x+y
add(1,2)  # 结果为3


那么到底要如何使用lambda表达式呢?
1、应用在函数式编程中
Python提供了很多函数式编程的特性,如:map、reduce、filter、sorted等这些函数都支持函数作为参数,lambda函数就可以应用在函数式编程中。如下:
# 需求:将列表中的元素按照绝对值大小进行升序排列
 

list1 = [3,5,-4,-1,0,-2,-6]
sorted(list1, key=lambda x: abs(x))

当然,也可以如下:

list1 = [3,5,-4,-1,0,-2,-6]
def get_abs(x):
    return abs(x)


sorted(list1,key=get_abs)

 

2、应用在闭包中
python语言中形成闭包的三个条件,缺一不可:
1)必须有一个内嵌函数(函数里定义的函数)——这对应函数之间的嵌套
2)内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量——内部函数引用外部变量
3)外部函数必须返回内嵌函数——必须返回那个内部函数

def get_y(a,b):
     return lambda x:ax+b


y1 = get_y(1,1)
y1(1) # 结果为2

当然,也可以用常规函数实现闭包,如下:

def get_y(a,b):
    def func(x):
        return ax+b
    return func


y1 = get_y(1,1)
y1(1) # 结果为2

只不过这种方式显得有点啰嗦。

那么是不是任何情况下lambda函数都要比常规函数更清晰明了呢?肯定不是。
Python之禅中有这么一句话:Explicit is better than implicit(明了胜于晦涩),就是说那种方式更清晰就用哪一种方式,不要盲目的都使用lambda表达式。


三元运算符
'''
python的三元运算格式如下:
结果=值1 if 条件1 else 值2,如果条件为真结果为值1,否则结果为值2。
'''

aa = lambda x, y: x+y if x > 10 else x*y
print('# 条件x>10为真,返回值1')
res = aa(30, 4)
print(res)

print('# 条件x>10为假,返回else的值')
res = aa(3, 4)
print(res)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3之lambda表达式和三元运算符 的相关文章

随机推荐

  • task1

    Task1 伯努利模型 P X 1 p P X 0 1 p 三要素 1 极大似然估计 模型 伯努利模型 策略 经验风险最小化 极大似然估计 等价于当模型是条件概率分布 损失函数是对数损失函数时的经验风险最小化 算法 极大化似然 P X p
  • MySQL的存储过程

    存储过程是组为了完成特定功能的SQL语句集合 存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来 这个过程经编译和优化后存储在数据库服务器中 当需要使用该存储过程时 只需要调用它即可 存储过程在执行上
  • linux多节点zookeeper(不限于zookeeper)批量调起(举例,问题排查)

    小脚本 废话不多说直接来 bin bash flag 1 DfsOrAll 2 启动zookeeper 这里 hadoop01 hadoop02 hadoop03 都是节点别名 取代ip地址 可在 etc hosts配置 for i in
  • 翻转的卡片

    前言 第二篇 CodingStartup起码课 的视频练习 这几天都在看他的视频 然后跟着做出效果来 HTML CSS 制作翻牌效果 效果图 要点 使用 position 设置 2 个卡片重叠 正为 正面 反为 背面 transform r
  • pandas统计分析(下)——数据格式化、分组统计

    数据格式化 在数据处理以后需要对数据进行格式化 以增加数据的可读性 设置小数位数 主要使用round函数实现四舍五入 decimals参数用于设置保留小数的位数 round decimals 0 args kwargs decimals 每
  • android对webkit做了哪些封装,lAndroidwebkit简介及开发遇到的一些问题.doc

    lAndroidwebkit简介及开发遇到的一些问题 Android webkit简介 张立鹏 M厂开发五部目录 1 webkit架构2 2 Application3 2 1 WebViewClient里面几个重要方法3 2 2 WebCh
  • sql net message from client

    sql net message from client 2011 05 09 15 18 17 分类 等待事件 标签 字号大中小 订阅 sql net message from client大部分情况下对于数据库来说是空闲等待事件 表示数据
  • [Gradle中文教程系列]-跟我学Gradle-5.3:依赖-管理依赖的版本(传递(transitive)\排除(exclude)\强制(force)\动态版本(+))

    http blog csdn net pkaq article details 53906668
  • 抓包查看http + json 中的 json信息

    一 抓包查看 抓包中过滤http报文 因为json信息在http response中 点击 http 1 1 200 OK 报文 查看这个报文中的 http gt hypertext transfer protocol gt line ba
  • AndroidStudio编译调试aosp11R 的Launcher3

    1 下载aosp并编译 2 下载Launcher3 可以直接使用aosp中的 也可以使用git单独下载 git clone https android review googlesource com platform packages ap
  • 模式分类识别

    模式分类识别 BP神经网络多特征分类预测 Matlab完整程序 目录 模式分类识别 BP神经网络多特征分类预测 Matlab完整程序 分类结果 基本介绍 程序设计 参考资料 分类结果 基本介绍
  • Linux中的用户登录和管理指令

    关机 重启指令 shutdown h now 立刻进行关机 shutdown h 1 1分钟之后自动关机 同时该指令和shutdown 作用一致 shutdown r now 现在重新启动计算机 r代表reboot halt 立即关机 re
  • js怎么实现数组里的数据相加_JS怎么对数组内元素进行求和

    JS数组内元素求和 我们可以使用reduce 方法查找或计算数字数组的总和 该reduce 方法对数组的每个成员执行指定的reducer函数 从而生成单个输出值 下面我们就结合具体的代码示例 给大家介绍JS数组内元素求和的实现方法 代码示例
  • 文章生成器-原创文章生成器

    在网络营销领域 优质文章是吸引新客户和保留老客户的重要工具 然而 生成高质量且符合SEO优化的文章并不是一件容易的事情 这就是为什么网站文章生成器如今备受欢迎的原因 而在众多的文章生成工具中 147GPT批量生成文章软件是一款非常出色的文章
  • ACM金牌学长,算法竞赛经验分享

    大家好 我是编程熊 不少读者问我 本科打算法竞赛 你如何训练的呀 有什么经验么 于是小熊写一篇ACM算法竞赛入门和进阶指南 分享一下经验和学习方法 也许你可能不参加算法竞赛 但知道厉害的人如何学习 训练 一步步变强 也是可以借鉴和学习的 如
  • qt中comobox下拉框的样式

    参考博客 https blog csdn net li235456789 article details 50915842 1 实现效果如下 1 实现代码如下 放在样式表中实现 QComboBox drop down subcontrol
  • Android数据库安全解决方案,使用SQLCipher进行加解密

    转载请注明出处 http blog csdn net guolin blog article details 11952409 我们都知道 Android系统内置了SQLite数据库 并且提供了一整套的API用于对数据库进行增删改查操作 数
  • C#Socket编程

    Microsoft Net Framework为应用程序访问Internet提供了分层的 可扩展的以及受管辖的网络服务 其名字空间System Net和System Net Sockets包含丰富的类可以开发多种网络应用程序 Net类采用的
  • 玩转GD32F3x0开发板,J-Flash烧写程序

    J Flash直接烧写GD32芯片一般会出现异常错误 如下 Timeout while checking target RAM RAMCode did not respond in time Project setting gt MCU g
  • Python3之lambda表达式和三元运算符

    lambda表达式 lambda表达式 通常是在需要一个函数 但是又不想费神去命名一个函数的场合下使用 也就是指匿名函数 lambda是一个表达式而不是一个语句 lambda用来编写简单的函数 不会再重复利用的函数 而def用来处理强大的任