我认为这是一个非常易读的代码块,
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
声明?
答案 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
是一个例外,在这里。它被添加到该语言中,以提供一种不易出错的方式来实现许多用户已经尝试通过and
和or
短路黑客实现的目标({{ 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
实际上是表达式。
表达式是评估为值的语句,在本例中为x
或y
。
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
。
答案 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文档的链接。那里有很多有用的东西,所以请看看。
其他人在这里也提出了单行语法,它也有效。然而,理解这两种方法是有益的;通过这种方式,您可以使代码尽可能简单,但如果您的算法将从中受益,您还可以嵌套循环和条件。
快乐的编码!