写点什么

【技能树共建】Python 三元表达式

作者:梦想橡皮擦
  • 2022 年 6 月 04 日
  • 本文字数:1185 字

    阅读完需:约 4 分钟

Python 三元表达式是什么

Python 中没有其它语言的三元表达式(三目运算符)相关说法,但是有类似的语法。在 Python 中,三元表达式是一种语法结构,一般被 Python 开发者叫做条件表达式,它的结构如下所示:


表达式(1)为 True 执行语句 if 条件表达式(1) else 表达式(1)为 False 执行语句
复制代码

怎么用

用于 if 语句简化

三元表达式可以将简单的 if 语句 缩减为一行代码。


age = 20
cn = "成年" if age >= 18 else "未成年"print(cn)
复制代码


if 语句 如下所示:


age = 20if age >= 18 :    cn = "成年"else:    cn = "未成年"
复制代码

返回多个条语句

可以编写如下代码结构,在条件表达式中返回多条语句。


age = 20
cn = "成年", "大于18" if age >= 18 else "未成年"print(cn)
复制代码


代码返回一个元组,内容为 ('成年', '大于18') ,这里一定注意不要使用分号 ; ,否则只返回第一个语句的结果。


age = 20
cn = "成年"; "大于18" if age >= 18 else "未成年"print(cn)
复制代码


运行代码之后,输出 成年

在函数内部使用三元表达式

有些简单的判定逻辑,可以直接使用三元表达式简化,例如判断传入参数是否为偶数。


def even_num(num):    return True if num % 2 == 0 else False
复制代码

三元表达式用于列表推导式

在列表推导式知识点中,也存在三元表达式的落地应用,例如下述代码。


li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]# ret = [i for i in li if i % 2 == 0]ret = [i if i % 2 == 0 else None for i in li]print(ret)
复制代码


上述代码重点注意列表生成器部分代码,三元表达式所在位置。

三元表达式与 lambda

有时候可以将三元表达式与 lambda 进行结合,让代码变得更加简洁。


声明一个函数,返回较大值


def max(a, b):    if a > b:        ret = a    else:        ret = b
return ret
r = max(5, 6)print(r)
复制代码


由于上述代码非常简单,可以直接使用 lambda 匿名函数实现。


max = lambda a, b: a if a > b else br = max(10, 15)print(r)
复制代码

提高场景

Python 条件表达式可以嵌套使用,但是建议最多嵌套两层,而且是在代码简单的情况下,具体编码如下所示,你需要重点学习下述问题。


在嵌套的时候,还需要注意 if 和 else 配对问题。


# 编写一个三元表达式,首先判断其值大于20,然后在判断是奇数(案例,无实际意义)num = 19ret = "小于20" if num < 20 else ("奇数" if num % 2 == 1 else "偶数")print(ret)
复制代码

扩展知识

在很多地方会将 Python 的条件表达式进行扩展,出现下述两种用法,但都属于炫技能力,实战性不强。


例如下述内容:


元组条件表达式


age = 20
cn = ("未成年", "成年")[age >= 18]print(cn)
复制代码


语法格式如下所示


 (当后面的表达式为假时返回,当后面的表达式为真时返回)[条件表达式]
复制代码


字典条件表达式


age = 20
cn = {False: "未成年", True: "成年"}[age >= 18]print(cn)
复制代码


你会发现,上述两种写法都有一些故弄玄虚,而且代码 非常不易 阅读,所以不建议实战编码时使用。

发布于: 刚刚阅读数: 3
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
【技能树共建】Python 三元表达式_6月月更_梦想橡皮擦_InfoQ写作社区