python条件表达式有哪几个_Python中条件表达式的评估顺序是什么?
我知道python中的条件表达式是x if c else y,但是我在使用它时遇到了一些问题。
我有两个代码要比较。
代码1:
1
2
3
4
5
6
7
8def fun(p):
if len(p) >= 2:
p[1] = 'Ok'
else:
p.append('Ok')
p = [1]
fun(p)
print p
代码1的输出:
1[1, 'Ok']
代码2:
1
2
3
4
5
6def fun(p):
(p[1] = 'Ok') if (len(p) >= 2) else p.append('OK')
p = [1]
fun(p)
print p
代码2的输出:
1
2
3(p[1] = 'Ok') if (len(p) >= 2) else p.append('OK')
^
SyntaxError: invalid syntax
我知道代码1的格式是"if c:x else:y",评估顺序是:
C
X
Y
代码2引发语法错误,原因可能是P[1]不存在。所以我猜"x如果c else y"的格式是这样计算的:
X
C
Y
但这只是我的猜测。有人知道代码2错误而代码1正确的真正原因吗?
注意,赋值是语句,不能出现在表达式上下文中。这就是代码2中出现错误的原因。
使用SyntaxError的原因是因为python区分了语句和表达式。
作业,比如
1p[1] = 'Ok'
是语句,不能是表达式的一部分,包括条件表达式。看看在python中表达式和语句有什么区别?更多信息。
计算的顺序不包含在其中——当对任何代码进行分析时,SyntaxError发生在对其进行计算之前。
在if语句和条件表达式中,计算的顺序是ether
条件
真实陈述
或
条件
虚假陈述
所以,在
1
2
3
4if condition:
true_statement
else:
false_statement
或
1true_statement if condition else false_statement
根据条件的真实性,只评估true或fase语句。
谢谢你的帮助,我现在知道有什么不同。
作业不是表达(其他人指出)。因此出现了语法错误。
关于您关于评估顺序的问题:
在if else表达式中(!)首先计算条件操作数,然后计算then操作数(最左边)或else操作数(最右边)。不计算另一个操作数。
在OR表达式中,操作数是从最左到最右(a or b or c or d or ...)进行计算的,但直到找到布尔值为真的操作数为止。不计算其余表达式。
在和表达式中,操作数是从最左到最右(a and b and c and d and ...)进行计算的,但直到找到布尔值为假的操作数为止。不计算其余表达式。
内部表达式在外部表达式(当然)之前进行计算:third(second(first()))。
在所有其他情况下(a() + b()、f(g(), h())、a[b] = d() + e,订单定义如下。通常它是从左到右的,除了赋值(它在左前右)。
正如丹D.指出的,在表达式上下文中不能有语句。
为了学习——我不建议这样做——我将向您展示如何使用内联X if C else Y来完成您要做的工作:
1
2def fun(p):
p.__setitem__(1, 'Ok') if len(p) >= 2 else p.append('OK')
如您所见,您的第一个版本的可读性要高得多。
可读性是你不这样做的唯一原因吗?(使用三元运算符语法产生副作用似乎不礼貌。)
@李昂当然是对的——这是误用三元运算符,因为我们只是在丢弃答案(要么是None,要么是None)。但至少我们对此有明确的认识——毫无疑问,这是专门为副作用而做的。
@拉齐尔感谢你给我另一个解决方案。
python条件表达式有哪几个_Python中条件表达式的评估顺序是什么?相关推荐
- python实例化是什么意思_Python中实例化class的执行顺序示例详解
前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 一般来说一个类里面有类变量和方法,比如我们定 ...
- python表达式是什么_Python中的表达式是什么?
我对它的含义或定义有些困惑. 这不是生成或计算新数据值的代码吗?(泽尔在书中说) 然后我想知道字符串数据类型是否是表达式. 如果是,那么当参数是字符串时,eval()会做什么? Zelle Sayse ...
- 条件测试 linux,linux系统中条件测试语句
linux系统中条件测试语句 linux系统中条件测试语句分为4类: 1.文件测试语句 2.逻辑测试语句 3.整数值比较语句 4.字符串比较语句 一.文件测试语句 -e :是否存在 -f :是否为文件 ...
- python条件表达式有哪几个_python条件表达式:多项分支,双向分支
# ### 多项分支 ''' if 条件表达式1: code1 code2 elif 条件表达式2: code3 code4 elif 条件表达式3: code5 code6 else: code7 ...
- python中24≤2825是否合法_Python中条件24=2825是合法的,且输出为false。_学小易找答案...
[程序题]数据资料中打开文本"沉默的羔羊" 编写程序,输出出现次数排名前5的人名 [单选题]下面程序的执行结果是 ______________ . s = 0 for i in r ...
- lambda表达式python啥意思_Python中lambda表达式是什么
Python中lambda表达式是什么 发布时间:2020-09-24 09:56:07 来源:亿速云 阅读:83 作者:Leah 本篇文章给大家分享的是有关Python中lambda表达式是什么,小 ...
- python lambda表达式_Python中lambda表达式
Python中lambda表达式 1.lambda的应⽤用场景 如果一个函数有一个返回值,并且只有一句代码,可以使用 lambda简化. 2. lambda语法 lambda 参数列列表 : 表达式 ...
- python标识符区不区分大小写_Python 中的标识符是不区分大小写的。
[判断题]Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言. [判断题]当if有多个条件时可使用括号()来区分判断的先后顺序. [单选题]用加热驱除水分法测定 CaSO 4 · 1 ...
- 正则表达式 python 没有则不匹配_python中关于正则表达式二
2.2 反向引用 \1, \2... 表达式在匹配时,表达式引擎会将小括号 "( )" 包含的表达式所匹配到的字符串记录下来.在获取匹配结果的时候,小括号包含的表达式所匹配到的字符 ...
最新文章
- R语言tidyr包gather()函数实战详解:数据收缩、从宽表到窄表
- ARM7+PROTEUS调试(转)
- gpu编程如何一步步学习_如何学习贴片机编程
- 利用CVE-2019-1040 - 结合RCE和Domain Admin的中继漏洞
- access游戏库不显示 ea_全球游戏公司营收一览:腾讯连续第六年霸榜
- java 4级_《软件测试人员(Java)(4级)》【价格 目录 书评 正版】_中国图书网
- php订单号生成规则,项目笔记之订单号生成规则以及方法,第一篇!
- java date类1900,java - 使用javax.validation验证日期不得少于1900-01-01 - 堆栈内存溢出...
- 二维码的生成细节和原理源码
- vue开发网站seo优化方法
- 开源项目—swift开发记事本APP
- android系统版本命名,安卓历代系统版本命名回顾 你吃过哪些甜点?
- 中考落幕|教育部:力争到2022年全面实行美育中考,美育到底考什么?
- Java编程那些事儿78——时间和日期处理
- Linux服务详解(主要基于RedHat系的及Centos默认服务详解)(综合整理)
- XCTF MISC 高手区 2017_Dating_in_Singapore
- CAS Server
- 我国北斗卫星导航系统今日起试运行
- 数据库连接时时区问题
- TFS导出工作项、bug,形成excel文件
热门文章
- 贺利坚老师汇编课程28笔记:在代码段使用数据加个标号start
- ArrayList使用
- rabbitmq3.7.3 发布了一个新的 exchange x-random
- Nginx篇--解读nginx配置
- centos下 将(jgp、png)图片转换成webp格式
- NHibernate官方文档中文版——批量插入(Batch inserts)
- 通过SmartGit把java maven项目传到码云
- 沈逸老师PHP魔鬼特训笔记(3)
- java io读书笔记(8)FileInputStream/FileOutputStream的应用
- [置顶] Android仿人人客户端(v5.7.1)——应用主界面之左侧面板UI实现