为什么Python没有"继续如果"声明?

时间:2018-03-16 01:29:59

标签: python python-3.x

我认为这是一个非常易读的代码块,

for i in range(100):
    continue if i % 2 == 0

但它在语法上并不正确。我们可以在Python中做其他好事,

for i in things:
    total += 3 if i % 2 == 0 else 1

或者,也许,

return a if b > a else c

为什么我们不能做continue if声明?

3 个答案:

答案 0 :(得分:11)

流程:

for i in range(100):
    continue if i % 2 == 0

相当于:

for i in range(1, 100, 2):
    ...

或者更一般地说:

for i in range(100):
    if i % 2 == 0:
        continue

Python语言设计师有一个投票反对语法变化的历史,它只提供略微不同的方法来做同样的事情("应该有一种明显的方法来做到这一点")。

您提及的单线构造的类型

x if cond else y

是一个例外,在这里。它被添加到该语言中,以提供一种不易出错的方式来实现许多用户已经尝试通过andor短路黑客实现的目标({{ 3}})。  野外代码使用:

cond and x or y

这在逻辑上并不等同,但对于已经熟悉C语言的三元cond ? : x : y语法的用户来说,这是一个容易犯的错误。正确的等价物是:

(cond and [x] or [y])[0]

但是,这很难看。因此,添加表达式x if cond else y的基本原理强于仅仅是方便。

答案 1 :(得分:2)

因为x if cond else y实际上是表达式。 表达式是评估为值的语句,在本例中为xy

continue不是一个值,所以就是这样。另外,

if cond:
    continue

真的不是更难或者更容易出错?#34;比continue if cond要好,而v = x if cond else y可能比

更好
if cond:
    v = x
else:
    v = y

还有一个事实是,如果我们允许continue if cond,我们会添加一种新的方式来使用此_ if cond模式,即我们允许它没有else

欲了解更多信息: https://docs.python.org/2.5/whatsnew/pep-308.html

答案 2 :(得分:0)

Python确实有这样的东西,语法有点不同。而不是将“if和”continue“合并为一个语句,如果它的计算结果为true,则将它们分为条件语句(如果,等等)和控制流(继续,传递,中断等)。代码示例,语法为:

for i in range(100):
    if i % 2 == 0:
        continue
    else:
        #you could also add an else like this do something else if the 
        #number evaluated to odd

这将继续进行外循环的下一次迭代。还有其他有用的迭代工具,称为“控制流工具”。我将包含一个解释这个的Python文档的链接。那里有很多有用的东西,所以请看看。

其他人在这里也提出了单行语法,它也有效。然而,理解这两种方法是有益的;通过这种方式,您可以使代码尽可能简单,但如果您的算法将从中受益,您还可以嵌套循环和条件。

快乐的编码!

https://docs.python.org/3/tutorial/controlflow.html