Python三目运算符(三元运算符)用法详解(含Python代码)

2023-05-16

一、前言

三目运算符,又称条件运算符,是计算机语言(c,c++,java等)的重要组成部分。它是唯一有3个操作数的运算符,有时又称为三元运算符。

定义:

对于条件表达式b ? x : y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。

一个条件表达式绝不会既计算x,又计算y。

条件运算符是右结合的,也就是说,从右向左分组计算。例如,a ? b : c ? d : e将按a ? b : (c ? d : e)执行。

可以理解为条件 ? 结果1 : 结果2 里面的?号是格式要求。也可以理解为条件是否成立,条件成立为结果1,否则为结果2。

注意:在C语言中,结果1 和 结果2的类型必须一致。

a ? b : c简单理解方式为:

if(a) {
    return b;
    
} else { 
    return c;
}

一个C语言中的例子解释:

int a = 2;
 
int c = 3;
 
int b = (a > c) ? a : c;
 
cout << "b:" << b << endl;

cout是c++语言的输出符号。

endl英语意思是end of line,即一行输出结束,然后输出下一行。

cout<<endl是使程序此行输出结束。

cout<<"b:"<<b<<endl:类似于C中的:printf(“b:%d\n”,b)。

我们知道a>c的结果是False,所以b值返回c。

所以我们的输出结果为:

b:3

接下来看个复杂的:

int a = 1, b = 2, z, c = 3;
z = a > b ? a : (b > c ? b : c);
cout << "z:" << z << endl;

我们看右部分:b>c返回值为False,所以返回3

a>b返回False,所以最终输出为:z:3

至此,大家理解了三元运算符的定义。

二、Python中的三目运算符

Python语言不像Java、JavaScript等这些语言有这样的三目运算:

判段的条件?条件为真时的结果:条件为假时的结果

但是Python也有自己的三目运算符:

条件为真时的结果 if 判段的条件 else 条件为假时的结果

即:Python可以通过if语句来实现三目运算符的功能,因此可以把这种if语句当做三目运算符,具体语法格式如下:

返回True执行 if 表达式 else 返回False执行

我们举一个简单的例子来帮助理解:

假设现在有两个数字,我们希望获得其中较大的一个,那么可以使用 if else 语句,例如:

if a>b:
    max = a
else:
    max = b

但是 Python 提供了一种更加简洁的写法,如下所示:

max = a if a>b else b

这里详细解释一下:

max = a if a>b else b 的含义是:

如果 a>b 成立,就把 a 作为整个表达式的值,并赋给变量 max;

如果 a> b 不成立,就把 b 作为整个表达式的值,并赋给变量 max。

第二个例子:

a = "返回True执行" if 3 > 4 else "返回False执行"
print (a) 

我们的判断条件为3>4是不满足的,所以执行返回False执行

运行结果:返回False执行

三、在三目运算符中放置多条语句方式

在Python的三目运算符中,允许在"返回True执行"和"返回Flase执行"中放置多条语句,有以下两种方式:

1. 使用英文逗号隔开,每条放置的语句都会执行,程序返回多条语句的返回值组成的元组:

b = 3 + 1, "3 > 2",print('AAA') if 1 > 2 else print("BBB"),2 + 2
print (b)

上面的例子中,因为 1 > 2False,所以执行并返回3 + 1,"3 > 2",2 + 2,print("BBB")这四条语句,由于print()函数没有返回值,故返回None,运行结果如下:

BBB
(4, '3 > 2', None, 4)

2. 使用英文分号隔开,每条语句都会执行,但程序只会返回第一条语句的返回值:

b = 1 + 1; "3 > 2";print('AAA') if 1 > 2 else print("BBB");2 + 2
print (b)

这里的if…else…执行print(“BBB”),返回的是第一条语句1 + 1的返回值2,所以,运行结果如下:

BBB
2

四、总结

这是一种类似于其它编程语言中三目运算符? :的写法。

Python 是一种极简主义的编程语言,它没有引入? :这个新的运算符,而是使用已有的 if else 关键字来实现相同的功能。

使用 if else 实现三目运算符(条件运算符)的格式如下:

exp1 if contion else exp2

condition 是判断条件,exp1exp2 是两个表达式。

如果 condition 成立(结果为真),就执行 exp1,并把 exp1 的结果作为整个表达式的结果;

如果 condition 不成立(结果为假),就执行 exp2,并把 exp2 的结果作为整个表达式的结果。

五、三目运算符的嵌套

Python 三目运算符支持嵌套,如此可以构成更加复杂的表达式。在嵌套时需要注意 if 和 else 的配对,例如:

a if a>b else c if c>d else d

应该理解为:

a if a>b else ( c if c>d else d )

就是我们上面讲的:条件运算符是右结合的

例子:

a = int( input("Input a: ") )
b = int( input("Input b: ") )
print("a大于b") if a>b else ( print("a小于b") if a<b else print("a等于b") )

运行结果:

Input a: 5
Input b: 6
a小于b

该程序是一个嵌套的三目运算符。程序先对 a>b 求值,如果该表达式为 True,程序就返回执行第一个表达式 print(“a大于b”),否则将继续执行 else 后面的内容,也就是:( print("a小于b") if a<b else print("a等于b") ),进入该表达式后,先判断 a<b 是否成立,如果 a<b 的结果为 True,将执行 print(“a小于b”),否则执行 print(“a等于b”)。

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

Python三目运算符(三元运算符)用法详解(含Python代码) 的相关文章

  • HttpClient模拟登录总结(不能跳转及跳转后不能登录)

    最近在写一个模拟登录的程序 xff0c 从网上找了很多资料 xff0c 都没能有一个完整的例子可成功跳转登录后的页面 xff0c 现把我的代码拿来与大家分享一下 xff0c 希望可以帮到一些人吧 其原理是 xff1a 通过HttpClien
  • JestonTX2更新软件源

    JestonTX2刷机后需要更新软件源 更新软件源后 xff0c 才可以正常安装QT等软件 软件源记录文件放在以下文件中 cd etc apt source list 可以使用gedit打开此文件 sudo gedit etc apt so
  • Kali的下载安装详细过程

    1 什么是Kali xff1f Kali Linux是专门用于渗透测试的Linux操作系统 2 打开官网 Kali Linux Penetration Testing and Ethical Hacking Linux Distributi
  • 本地搭建GitLab地址不一致问题

    1 本地虚拟机用docker搭建Gitlab project clone 地址如下 xff1a 实际地址如下 xff1a http 192 168 56 51 root apacha backend 本来没在意这个问题 xff0c clon
  • 数据库笔试题(答案)

    一 填空题 每题2分 xff0c 共10分 1 索引字段值不唯一 xff0c 应该 使用 的索引类型为 普通索引 2 只有满足联接条件的记录才包含在查询结果中 xff0c 这种联接为 内联接 3 E R模型的组成包括那些 元素 实体 属性
  • mac时间机器占用大量系统盘空间且在访达中无法找到

    mac用时间机器备份到外置移动硬盘 xff0c 但是后来发现mac系统盘占用随之增加 经过研究发现 xff0c 时间机器备份是现在mac系统盘备份然后转移到移动硬盘 xff0c 而且系统盘中的备份文件是隐藏的 xff0c 所以在关于本机 x
  • android——降低gradle的版本、下载好gradle的包存放的位置

    一 降低gradle的版本 本文以gradle版本7 0 2改成6 3为例子 xff1a 1 在build gradle里面修改dependencies里面的 classpath 34 com android tools build gra
  • C语言十进制转八进制、十六进制以及十六进制转十进制、八进制

    以下程序的输出结果是 main int a 61 20 printf 34 d o x n 34 a a a 看到这个题目首先我们要明白 o 和 x代表的是什么意思 o代表的是输出该数字的八进制 x代表的是输出该数字的十六进制 1 题目给出
  • 解决Mybatis分页插件PageHelper自动添加limit导致分页失败问题

    目录 1 问题描述2 解决方案2 1 方案一2 2 方案二 3 完成效果4 一点困惑5 参考文献 1 问题描述 今天在完善项目的时候 xff0c 有一个需求就是给我的评论区实现分页显示评论数 xff0c 但是当自己运行的时候点击查看评论的时
  • STM32 HAL库 STM32CubeMX -- I2C(IIC)

    文章目录 一 I2C 协议简介I2C 物理层I2C协议层I2C架构通讯过程 二 STM32Cube MX配置三 I2C HAL库函数 一 I2C 协议简介 I2C 通讯协议 Inter xff0d Integrated Circuit 也就
  • 一个unsigned int 数的二进制表示中有多少个1

    这是一道面试题可以用以下的一些方案 第一种是很容易想到的采用循环的方式并且与1进行位与运算 xff0c 具体代码如下 1 unsigned int GetBitNumOfOne ByLoop1 unsigned int nValue 2 3
  • 网络安全(九)—— kali进行断网攻击

    kali进行断网攻击 1 查看是否有wlan0 wlan0mon网卡 ifconfig 2 开启监听 airmon ng start wlan0mon 3 扫描wifi airodump wlan0mon 攻击张书语 4 停止扫描 ctrl
  • Linux 之 System V信号量

    其实就是学几个函数的用法 xff1a ftok semget semctl semop 如果对哪个函数不熟悉就man 一下 xff0c 例如man semctl 下面是几个函数简单的实现代码 xff0c 自己可以实现一下 xff0c 助于理
  • Modern C++ 变长参数的展开

    变长参数模板和变长参数 部分 Code 来自 现代 C 43 43 教程 xff1a 高速上手 C 43 43 11 14 17 20 xff0c 这里作为笔记记录 include lt iostream gt include lt str
  • 自制计算器(C语言的简单实现)(可多次使用)

    对于刚学C语言的小白来说 xff0c 似乎感觉不到C语言可以做些什么事情而感到枯燥 xff0c 接下来我讲带大家一起来做一个小的C语言程序 计算器 在这个程序中我们使用了switch case语句 xff0c do while循环 xff0
  • 在ubuntu创建可以在图形界面登录的用户

    sudo useradd s bin bash d home wykeinstein m wykeinstein sudo passwd wykeinstein 上述两条命令创建了可以在图形界面下登录的wykeinstein用户 注销当前用
  • gitlab的部署

    1 Git Github Gitlab 的区别 Git是一个开源的分布式版本控制系统 xff0c 用于敏捷高效地处理任何或小或大的项目 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件
  • centos7上安装mysql-5.7.20版本

    一 背景环境 root 64 node1 log cat etc redhat release CentOS Linux release 7 3 1611 Core mysql的官网下载地址 二 安装步骤 1 添加mysql组和mysql用
  • 输入n个整数,查找并删除重复的数字,打印结果。

    本人为c语言初学者 xff0c 如有错误欢迎指正 在学习c语言的过程我发现到这样一个比较有意思的题目 输入n个整数 xff0c 查找并删除重复的数字 xff0c 打印结果 xff0c 所以我想分享一下我个人的解题思路 xff1a 该题可以通
  • 零基础学习数据库SQL教程(一)(简单的SELECT语句 简单的INSERT语句 简单的UPDATE语句 简单的DELETE语句)

    写在前面的话 xff1a 本文章内容是自己在LintCode网站SQL教程学习过程中做的学习总结 xff0c 以便自己复习和大家学习 xff0c 如果去刷此网站的题 xff0c 也可以把此文作为参考答案来使用 例题的答案是本人所写 xff0

随机推荐