我认为这是一段非常易读的代码,
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
语句?我认为这是一段非常易读的代码,
for i in range(100):
continue if i % 2 == 0
for i in things:
total += 3 if i % 2 == 0 else 1
return a if b > a else c
continue if
语句?流程:
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
短路技巧做的事情(来源:Guido)。在代码中会使用:
cond and x or y
这两种写法在逻辑上并不等价,但对于已经熟悉 C 语言的用户来说,很容易犯这种错误写法:cond ? : x : y
。 正确的等价写法是:
(cond and [x] or [y])[0]
但这样很丑陋。因此,添加表达式x if cond else y
的理由并不只是为了方便而已。
x if cond else y
实际上是一个表达式。
表达式是一种可以求值的语句,在这种情况下,它的值可以是 x
或者 y
。
continue
不是一个值,所以它与前面提到的内容有所不同。
if cond:
continue
使用continue if cond
语句比较容易理解和避免出错,而v = x if cond else y
语句可能更好一些。
if cond:
v = x
else:
v = y
还有一个事实,如果我们允许使用continue if cond
,我们就添加了一种新的使用模式_ if cond
的方式,即我们允许在没有else
的情况下使用它。
else
存在歧义。 - chadlagorePython确实有这样的东西,语法只是有点不同。与将“if”和“continue”组合为一个语句不同,它们被分成了条件语句(if、while等)和控制流程(continue、pass、break等),如果它评估为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文档。那里有大量有用的东西,请务必查看。
这里还有人建议使用单行语法,这也可以。然而,了解两种方法是好的;这样你就可以尽可能地保持代码简单,但如果你的算法受益于嵌套循环和条件,你也将拥有这种能力。
愉快的编码!
continue
关键字的存在 - 这一点是显而易见的!问题在于为什么我们在使用它时没有像其他关键字那样得到相同的语法糖。 - chadlagore
if i % 2 == 0: continue
。这只是另一种方式,反过来写并加上一个冒号。我不明白为什么人们总是反对这种方式。就像他们讨厌冒号一样。 - user2357112for i in range(1, 100, 2)
=) - Ry-all()
、any()
更好用,尤其是当我们需要在函数中使用多个break/continue时。 - millimoose