当条件匹配时,我一直试图摆脱循环。我试过下面的单行:
break if a is not None else time.sleep(1)
和这个
a is not None and break
time.sleep(1)
两者都不起作用&投掷SyntaxError
而直接向前工作正常。
if a is not None:
break
time.sleep(1)
虽然我这样使用它没有问题,但我只是想知道为什么上面的语法是错误的。
答案 0 :(得分:5)
表达式表达式 if
表达式 else
表达式是一个三元运算符。表达式被评估。 break
是一个声明。它没有被评估,它被执行了。您收到语法错误,因为语法不正确。
正如@hugo Rivera所说,"所有表达都是陈述,但并非所有陈述都是表达。"
答案 1 :(得分:2)
所有表达式都是语句,但并非所有语句都是表达式。
三元运算符X if B else Y
仅接受表达式X
,B
和Y
,但break
是一个语句,不能用作表达式。
同样,您可以在三元运算符中return
,import
,指定等等。请参阅第二个链接以获取完整的陈述列表。