Python中能否将列表成员判断与if-else语句写在同一行?语法错误排查
当然可以!你只是踩了Python条件表达式的语法坑
首先明确回答:完全能把列表成员判断和单行if-else写在一起,但你的代码写法不符合Python的语法规则,这才导致了报错。
为什么你的代码报错?
你写的这段代码:
temperature = 10 if 'hi' in ['hi','2'] else temperature = 1
问题出在Python条件表达式(也就是我们常说的单行if-else)的语法要求上——它的结构是:变量 = 真值结果 if 判断条件 else 假值结果。这里else后面必须是一个表达式(比如一个数值、变量、计算式),而不是一个完整的赋值语句。你在else后面写了temperature = 1,这是一个赋值操作,不符合语法要求,所以触发了SyntaxError: can't assign to conditional expression。
正确的单行写法
只需要把要赋值的变量放在最前面,else后面直接写要赋的值就行:
temperature = 10 if 'hi' in ['hi','2'] else 1
这段代码的逻辑和下面的多行代码完全一致,而且写法合法:
if 'hi' in ['hi','2']: temperature = 10 else: temperature = 1
补充:如果只有if分支(不需要else)
要是你只想在满足列表成员判断时执行赋值,不需要else的情况,也可以写成单行:
if 'hi' in ['hi','2']: temperature = 10
不过这种写法虽然合法,但可读性不如多行代码,建议只在逻辑非常简单的时候使用。
关于列表成员判断的说明
顺便提一句,你用到的'hi' in ['hi','2']这个判断是完全正确的,它会返回布尔值True,所以上面的正确代码会把temperature设为10;如果把判断改成'hello' in ['hi','2'],就会把temperature设为1,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Jason Endries
相关产品推荐
相关产品推荐

