我知道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中条件表达式的评估顺序是什么?相关推荐

  1. python实例化是什么意思_Python中实例化class的执行顺序示例详解

    前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 一般来说一个类里面有类变量和方法,比如我们定 ...

  2. python表达式是什么_Python中的表达式是什么?

    我对它的含义或定义有些困惑. 这不是生成或计算新数据值的代码吗?(泽尔在书中说) 然后我想知道字符串数据类型是否是表达式. 如果是,那么当参数是字符串时,eval()会做什么? Zelle Sayse ...

  3. 条件测试 linux,linux系统中条件测试语句

    linux系统中条件测试语句 linux系统中条件测试语句分为4类: 1.文件测试语句 2.逻辑测试语句 3.整数值比较语句 4.字符串比较语句 一.文件测试语句 -e :是否存在 -f :是否为文件 ...

  4. python条件表达式有哪几个_python条件表达式:多项分支,双向分支

    # ### 多项分支 ''' if 条件表达式1: code1 code2 elif 条件表达式2: code3 code4 elif 条件表达式3: code5 code6 else: code7 ...

  5. python中24≤2825是否合法_Python中条件24=2825是合法的,且输出为false。_学小易找答案...

    [程序题]数据资料中打开文本"沉默的羔羊" 编写程序,输出出现次数排名前5的人名 [单选题]下面程序的执行结果是 ______________ . s = 0 for i in r ...

  6. lambda表达式python啥意思_Python中lambda表达式是什么

    Python中lambda表达式是什么 发布时间:2020-09-24 09:56:07 来源:亿速云 阅读:83 作者:Leah 本篇文章给大家分享的是有关Python中lambda表达式是什么,小 ...

  7. python lambda表达式_Python中lambda表达式

    Python中lambda表达式 1.lambda的应⽤用场景 如果一个函数有一个返回值,并且只有一句代码,可以使用 lambda简化. 2. lambda语法 lambda 参数列列表 : 表达式 ...

  8. python标识符区不区分大小写_Python 中的标识符是不区分大小写的。

    [判断题]Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言. [判断题]当if有多个条件时可使用括号()来区分判断的先后顺序. [单选题]用加热驱除水分法测定 CaSO 4 · 1 ...

  9. 正则表达式 python 没有则不匹配_python中关于正则表达式二

    2.2 反向引用 \1, \2... 表达式在匹配时,表达式引擎会将小括号 "( )" 包含的表达式所匹配到的字符串记录下来.在获取匹配结果的时候,小括号包含的表达式所匹配到的字符 ...

最新文章

  1. R语言tidyr包gather()函数实战详解:数据收缩、从宽表到窄表
  2. ARM7+PROTEUS调试(转)
  3. gpu编程如何一步步学习_如何学习贴片机编程
  4. 利用CVE-2019-1040 - 结合RCE和Domain Admin的中继漏洞
  5. access游戏库不显示 ea_全球游戏公司营收一览:腾讯连续第六年霸榜
  6. java 4级_《软件测试人员(Java)(4级)》【价格 目录 书评 正版】_中国图书网
  7. php订单号生成规则,项目笔记之订单号生成规则以及方法,第一篇!
  8. java date类1900,java - 使用javax.validation验证日期不得少于1900-01-01 - 堆栈内存溢出...
  9. 二维码的生成细节和原理源码
  10. vue开发网站seo优化方法
  11. 开源项目—swift开发记事本APP
  12. android系统版本命名,安卓历代系统版本命名回顾 你吃过哪些甜点?
  13. 中考落幕|教育部:力争到2022年全面实行美育中考,美育到底考什么?
  14. Java编程那些事儿78——时间和日期处理
  15. Linux服务详解(主要基于RedHat系的及Centos默认服务详解)(综合整理)
  16. XCTF MISC 高手区 2017_Dating_in_Singapore
  17. CAS Server
  18. 我国北斗卫星导航系统今日起试运行
  19. 数据库连接时时区问题
  20. TFS导出工作项、bug,形成excel文件

热门文章

  1. 贺利坚老师汇编课程28笔记:在代码段使用数据加个标号start
  2. ArrayList使用
  3. rabbitmq3.7.3 发布了一个新的 exchange x-random
  4. Nginx篇--解读nginx配置
  5. centos下 将(jgp、png)图片转换成webp格式
  6. NHibernate官方文档中文版——批量插入(Batch inserts)
  7. 通过SmartGit把java maven项目传到码云
  8. 沈逸老师PHP魔鬼特训笔记(3)
  9. java io读书笔记(8)FileInputStream/FileOutputStream的应用
  10. [置顶] Android仿人人客户端(v5.7.1)——应用主界面之左侧面板UI实现