Python3中如何将链式比较的多分支条件改写为单行表达式?
解决Python条件表达式的SyntaxError问题
嘿,这个小问题我之前也踩过坑!你之所以会碰到SyntaxError: can't assign to conditional expression,是因为对Python条件表达式(也就是常说的三元运算符)的语法结构理解错啦。
错误原因分析
你写的这两种写法都有问题:
width = 3 if (-10 < amount < 10) else width = 2 width = 3 if (-10 < amount) else width = 2
Python的条件表达式本质是一个返回值的表达式,正确的结构是:变量 = 真值结果 if 判断条件 else 假值结果
你在else后面写width = 2属于画蛇添足——整个表达式已经会返回3或者2了,直接把这个结果赋值给width就行,不需要在分支里重复写赋值语句。另外第二个写法还错误地简化了原来的链式比较,把-10 < amount <10改成-10 < amount会改变原逻辑哦。
正确的单行写法
完全对应你原代码逻辑的正确单行表达式应该是:
width = 3 if -10 < amount < 10 else 2
Python原生支持这种链式比较,可读性和原多行if完全一致,甚至不需要额外加括号(当然加了也不会报错,只是没必要)。
再举个简单例子帮你理解
比如原来的多行代码:
if score >= 60: result = "及格" else: result = "不及格"
改成条件表达式就是:
result = "及格" if score >=60 else "不及格"
是不是一下子就清楚结构了?
内容的提问来源于stack exchange,提问作者artomason
相关产品推荐
相关产品推荐

