擅长:python、mysql、java
<p>如果执行<code>A if C else B</code>,则先执行<code>C</code>,然后执行<em>其中一个</em><code>A</code>或{<cd4>}中的一个(并返回结果),而如果执行<code>[B, A][C]</code>,则执行<code>A</code>和{<cd4>},<em>然后执行</em><code>C</code>。您可以通过使用某个函数<code>p("A") if p("C") else p("B")</code>和<code>[p("B"), p("A")][p("C")]</code>来轻松检查这一点,该函数打印其输入,然后返回<code>True</code>或{<cd13>}</p>
<p>所以在第一种情况下,<code>S if len(S)==b else f(S[1:],b)</code>,递归调用只在条件不适用的情况下执行。然而,在第二种情况下,它甚至在条件被测试之前被执行<em>,在递归调用的函数ad infinium中也是如此。在</p>
<p>(我假设您不打算在实践中使用它,因此这可能并不重要,但无论如何:请注意:(1)这两个函数都缺少对case <code>len(S) < b</code>的保护,(2)使用<code>S[-b:]</code>可以实现相同的效果,并且(3)使用<code>if/else</code>当然,<em>更具可读性。)</p>