有没有 '?' Python中的控制流? [复制]

Posted

技术标签:

【中文标题】有没有 \'?\' Python中的控制流? [复制]【英文标题】:Is There '?' Control Flow in Python? [duplicate]有没有 '?' Python中的控制流? [复制] 【发布时间】:2011-12-08 08:50:48 【问题描述】:

可能重复:Python Ternary Operator

有类似'?'的控制流算子吗? python中的C/C++?

如果有类似这样的代码块:

return n <= 1 ? n : fibo(n-1) + fibo(n-2)

会出现这样的错误:

File "fibonacci.py", line 2
    return n <= 1 ? n : fibo(n-1) + fibo(n-2)
                  ^
SyntaxError: invalid syntax

【问题讨论】:

可能叫错了;它需要三个操作数,因此它是三进制的,就像加法是二进制一样。碰巧在python或其他algol后代中没有很多三元运算符。这在 phihag 的回答中被唯一标识为“条件表达式” 【参考方案1】:

是的,条件表达式是available in Python 2.5+:

return n if n <= 1 else fibo(n-1) + fibo(n-2)

【讨论】:

需要注意的是条件是在这个python版本的中间。类 C 语言有&lt;cond&gt; ? &lt;yes_expr&gt; : &lt;no_expr&gt;,但python 有更流畅的&lt;yes_expr&gt; if &lt;cond&gt; else &lt;no_expr&gt;【参考方案2】:

你可以试试这个短路表达式return n &gt; 1 and fibo(n-1) + fibo(n-2) or n。虽然这不是三元语句,但它很简洁,可以在这种情况下完成工作。

【讨论】:

我认为这不适用于n==0 @NeilG 更新了我的答案。感谢您指出。

以上是关于有没有 '?' Python中的控制流? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

《python解释器源码剖析》第11章--python虚拟机中的控制流

用java控制流实现文件复制后,不能删除文件

列表理解Python中的嵌套控制流

python中的3种控制流语句之while

postgreSQL数据库同步流复制和异步流复制控制

Python-11:Python语法基础-控制流