为什么"if-else-break"在python中断?

Man*_*oel 7 python loops if-statement ternary-operator break

我试图使用if-else表达式,如果if条件失败,它应该打破循环,但是会invalid syntax出错.

示例代码:

a = 5
while True:
    print(a) if a > 0 else break
    a-=1
Run Code Online (Sandbox Code Playgroud)

当然,如果我用传统方式书写(不使用一个班轮),它就有效.

请让我知道breakelse关键字后使用命令有什么问题.

Wil*_*sem 18

如果我运行它,我会收到以下错误:

...     print(a) if a > 0 else break
  File "<stdin>", line 2
    print(a) if a > 0 else break
                               ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

这是因为

print(a) if a > 5 else break
Run Code Online (Sandbox Code Playgroud)

是一个三元运算符.三元运算符不是if陈述.这些使用语法:

<expr1> if <expr2> else <expr3>
Run Code Online (Sandbox Code Playgroud)

相当于 "虚函数":

def f():
    if <expr2>:
        return <expr1>
     else:
         return <expr3>
Run Code Online (Sandbox Code Playgroud)

所以这意味着旁边的部分else应该是一个表达式.break不是表达式,它是一个语句.所以Python并不期望这样.你不能return一个break.

,print也不是一个函数.所以这会使print声明出错.在 print是一个关键字.

您可以将代码重写为:

a = 5
while True:
    if a > 5:
        print(a)
    else:
        break
    a -= 1
Run Code Online (Sandbox Code Playgroud)

您可以在文档PEP-308中阅读更多相关信息.


hsp*_*her 5

If是一个表达式,break类似于return一个声明.你不能在一个句子中使用两个语句(除非你使用一个丑陋的分号).我知道如果我们能做到这一点真的很酷,但唉,这就是它的方式.

  • Willem Van Onsem的答案有很多有用的信息,但我喜欢这个答案的清晰度和易用性,以供实际使用; 简单地记住,你不能在一个句子中使用两个语句. (2认同)