if:else:和if:continue之间的区别
Posted
技术标签:
【中文标题】if:else:和if:continue之间的区别【英文标题】:Difference between if: else: and if: continue [closed] 【发布时间】:2019-08-07 13:24:54 【问题描述】:假设我有一个可迭代对象:球。我想对那个循环中所有不是蓝色的球做点什么。据我所知,我有两个选择:
使用 if: else:
for ball in balls:
if ball.blue:
# can do something with blue ball
else:
# now execute code for all balls that are not blue
使用 if:继续
for ball in balls:
if ball.blue:
# can do something with blue ball
continue
# now execute code for all balls that are not blue
对我来说,这两种结构可以实现的目标没有区别。有没有预期的区别?是否存在更快、更具可读性等的情况?
【问题讨论】:
为什么你认为使用不同的关键词必然会导致不同的结果 这样一个简单的例子没有区别——有时我更喜欢continue
成语来防止另一层缩进,但这很主观
我认为这是一个偏好问题。我会添加 if not ball.blue: without any else 选项或继续。
这是主观的,如果有一些 PEP 指导或文档,我会说遵循,但是对于这些琐碎的例子来说,这是一个品味问题
...do something to all...that are not blue...
您留下了另一个选项:if not ball.blue: do stuff
- 不需要pass
或continue
。
【参考方案1】:
我相信这应该取决于你对球做了什么。如果您正在做类似的事情,可以说改变球的大小,并且您希望蓝色的球具有一定的尺寸,而所有其他球的尺寸都是我将使用 if/else 的其他尺寸。 如果您所做的在概念上有所不同,我会使用 continue 示例。
如果你的目标是只对蓝球做点什么,你应该简单地写:
for ball in balls:
if not ball.blue:
# do what you want to balls that aren't blue.
【讨论】:
【参考方案2】:通常我们不会在使用continue
时放置语句,这意味着当特定条件然后简单地将光标再次带入for循环的下一轮迭代(不做任何事情以防未提及任何操作)。
普通的if
、else
条件用于简单的真假条件,条件 in if 满足则执行其语句 else 转到 else 块并执行其语句然后。
【讨论】:
不同意,continue
没有理由不应该被其他事情处理。无论如何,请在您完成驾驶之前不要回复!【参考方案3】:
对我来说,这两种结构可以实现的目标没有区别。有没有预期的区别?是否存在更快、更具可读性等的情况?
代码的工作方式没有区别。 continue
与将 everything 放在 else
中基本相同。
但是,如果 else
部分很长或使用了很多缩进级别,并且可能本身有一些循环,continue
和 break
会节省大量空间并允许更轻松地进行流管理!
例如想象一下,有很多案例您必须跳过该条目。这需要 if/else 或 continue
。例如。检查是否存在某些属性 - 如果不存在,则跳过该元素的其余部分。然后检查它的值 - 如果它是奇怪的东西,再次跳过......这可能会产生很多难以管理的缩进级别或范围。 contunue
省了一些麻烦。
另外,如果你已经写了一些代码,后来才意识到你有一些边界情况,你可以在循环的开头添加一个类似的“跳过”东西,不要缩进其余部分。缩进更改显示在 git 中(除非您另外配置)。在缩进很重要的语言中,当您稍后执行您或其他人的提交时,那些无用的“更改”可能会令人困惑。
【讨论】:
【参考方案4】:在您展示的情况下,没有区别,因为 if-else 语句之后没有逻辑。一般continue
是用来跳到for循环的另一个迭代的,所以在下面的情况下你就不能这么容易翻译了:
for ball in balls:
if ball.blue:
# can do something with blue ball
else:
# now execute code for all balls that are not blue
# here some logic
如果您将if
末尾的continue
替换为else
,则不会到达最后一行。
【讨论】:
对否决票有何评论? 我没有投反对票,但也许可以通过在您的代码 sn-p 中使用continue
来使您的示例更加清晰?【参考方案5】:
continue
和if
之间的唯一联系是你通常有一个条件来决定是否要continue
。 continue
用于结束循环的单个迭代,例如您的示例中的 for
循环,而不退出整个循环(break
这样做)。由于此处的任一分支也结束了迭代,因此在此示例中您没有实际区别。
for ball in balls:
if ball.blue:
pass
elif ball.red:
pass
else:
pass
if ball.static:
continue
ball.process_physics()
任何分支执行路径都可以转换为另一种结构,例如if not ball.static: ball.process_physics()
,但continue
告诉我们,在此迭代中不能再进一步向下做更多工作的else
。这有助于了解执行路径折回循环。 (可能有 finally
块之类的东西,但如果有的话,我们会看到 try
。)
【讨论】:
【参考方案6】:更简单、简单、直接的方法是:
...
if not ball.blue:
...
【讨论】:
以上是关于if:else:和if:continue之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
对 Python 中的 If、continue 和 else 的结果感到困惑