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 - 不需要passcontinue 【参考方案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循环的下一轮迭代(不做任何事情以防未提及任何操作)。

普通的ifelse 条件用于简单的真假条件,条件 in if 满足则执行其语句 else 转到 else 块并执行其语句然后。

【讨论】:

不同意,continue 没有理由不应该被其他事情处理。无论如何,请在您完成驾驶之前不要回复!【参考方案3】:

对我来说,这两种结构可以实现的目标没有区别。有没有预期的区别?是否存在更快、更具可读性等的情况?

代码的工作方式没有区别。 continue 与将 everything 放在 else 中基本相同。

但是,如果 else 部分很长或使用了很多缩进级别,并且可能本身有一些循环,continuebreak 会节省大量空间并允许更轻松地进行流管理!

例如想象一下,有很多案例您必须跳过该条目。这需要 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】:

continueif 之间的唯一联系是你通常有一个条件来决定是否要continuecontinue 用于结束循环的单个迭代,例如您的示例中的 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之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

else if 和 elseif 之间的区别 [重复]

对 Python 中的 If、continue 和 else 的结果感到困惑

Django和Flask中if else之间的区别[关闭]

elseif 与 else if 之间的潜在区别

python 基础知识汇总—— if else while continue

python基础;if else;for;while 分支处理.continue,break