【问题标题】:Is there a difference between `continue` and `pass` in a for loop in python?python中的for循环中的`continue`和`pass`有区别吗?
【发布时间】:2012-03-18 01:05:01
【问题描述】:

两个 python 关键字 continuepass 之间是否有任何显着差异,如示例中所示

for element in some_list:
    if not element:
        pass

for element in some_list:
    if not element:
        continue

我应该知道吗?

【问题讨论】:

  • @S.Lott:示例:while True:; pass # Busy-wait for keyboard interrupt (Ctrl+C)python docs 中让我感到困惑,我没有发现天气晴朗,在这种情况下它的行为相当于继续或其他是有意的。第一句话“pass语句什么都不做。”描述了我的问题的所有答案,但不知何故它没有引起我的注意。

标签: python syntax continue


【解决方案1】:

是的,他们做的事情完全不同。 pass 什么都不做,而 continue 继续下一个循环迭代。在您的示例中,如果您在if 之后添加另一条语句,差异将变得明显:在执行pass 之后,将执行这条进一步的语句。在continue 之后就不会了。

>>> a = [0, 1, 2]
>>> for element in a:
...     if not element:
...         pass
...     print(element)
... 
0
1
2
>>> for element in a:
...     if not element:
...         continue
...     print(element)
... 
1
2

【讨论】:

  • 我完全同意你的回答。但我仍然对 pass 关键字有疑问是否需要?并且需要,但为什么?谢谢
  • @HardikGajjar:由于pass 关键字没有任何作用,它仅在您在语法上需要缩进套件但不想做任何事情时才有用。一个常见的例子是如果你想忽略一些异常,你使用except SomeException: pass。还有许多其他用例。您不需要为此使用关键字,因为您可以使用任何其他不执行任何操作的语句(例如,0 是一个完全有效但没有效果的语句),但是为此使用关键字允许你更明确地说不想做任何事情。
  • @SvenMarnach 在风格上不赞成用pass 处理异常吗?
  • @MikePalmice 一点也不。
【解决方案2】:

是的,有区别。 continue 强制循环在下一次迭代开始,而pass 表示“这里没有要执行的代码”并将继续循环体的其余部分。

运行这些,看看有什么不同:

for element in some_list:
    if not element:
        pass
    print(1) # will print after pass

for element in some_list:
   if not element:
       continue
   print(1) # will not print after continue

【讨论】:

    【解决方案3】:

    continue 将跳回到循环的顶部。 pass 将继续处理。

    如果 pass 位于循环的末尾,则差异可以忽略不计,因为无论如何流程都会回到循环的顶部。

    【讨论】:

      【解决方案4】:

      for循环中pass和continue的区别:

      那么为什么要传入python呢?

      如果你想创建一个空的类、方法或块。

      例子:

      class MyException(Exception):
          pass
      
      
      try:
         1/0
       except:
         pass
      

      上面例子中没有'pass'会抛出IndentationError。

      【讨论】:

        【解决方案5】:

        在您的示例中,没有区别,因为两个语句都出现在循环的末尾。 pass 只是一个占位符,因为它什么都不做(它 执行到下一条语句)。另一方面,continue 有一个明确的目的:它告诉循环继续,就像它刚刚重新启动一样。

        for element in some_list:
            if not element:
                pass
            print element  
        

        很不一样
        for element in some_list:
            if not element:
                continue
            print element
        

        【讨论】:

          【解决方案6】:

          它们之间有区别,
          continue 跳过循环的当前迭代并执行下一次迭代。
          pass 什么都不做。这是一个空语句占位符。
          我宁愿给你举个例子,这会更好地说明这一点。

          >>> for element in some_list:
          ...     if element == 1:
          ...         print "Pass executed"
          ...         pass
          ...     print element
          ... 
          0
          Pass executed
          1
          2
          
          >>> for element in some_list:
          ...     if element == 1:
          ...         print "Continue executed"
          ...         continue
          ...     print element
          ... 
          0
          Continue executed
          2
          

          【讨论】:

            【解决方案7】:

            是的,有区别。 Continue 实际上跳过了循环的当前迭代的其余部分(返回到开头)。 Pass 是一个空白语句,什么都不做。

            python docs

            【讨论】:

              【解决方案8】:

              在这些例子中,没有。如果语句不是循环中的最后一个,那么它们具有非常不同的效果。

              【讨论】:

                【解决方案9】:

                这样考虑:

                通过: Python 纯粹是在缩进上工作的!与其他语言不同,没有空花括号。

                因此,如果您不想在条件为真的情况下不做任何事情,那么除了通过之外别无选择。

                继续:这仅在循环的情况下有用。如果对于某个范围的值,您不想在该特定通道的条件为真之后执行循环的其余语句,那么您将不得不使用 continue。

                【讨论】:

                • 所以,如果你想在条件为真的情况下什么都不做,那么除了通过之外别无选择 --> 这是不准确的,请参阅例如Sven Marnach 上面的评论。
                • @patrick 对不起,但他是对的。例如,如果一个变量既可以是浮点数也可以是整数,并且您想对所有整数执行操作,那么您可以简单地使用检查浮点数的 if 语句,使用 pass if语句为True,如果为False,则执行操作。这样可以有效地扫描多用途列表。
                【解决方案10】:
                x = [1,2,3,4] 
                for i in x:
                    if i==2:
                         pass  #Pass actually does nothing. It continues to execute statements below it.
                         print "This statement is from pass."
                for i in x:
                    if i==2:
                         continue #Continue gets back to top of the loop.And statements below continue are executed.
                         print "This statement is from continue."
                

                输出是

                >>> This statement is from pass.
                

                再次,让我们运行相同的代码并进行细微的更改。

                x = [1,2,3,4]
                for i in x:
                    if i==2:
                       pass  #Pass actually does nothing. It continues to execute statements below it.
                    print "This statement is from pass."
                for i in x:
                    if i==2:
                        continue #Continue gets back to top of the loop.And statements below continue are executed.
                    print "This statement is from continue."
                

                输出是 -

                >>> This statement is from pass.
                This statement is from pass.
                This statement is from pass.
                This statement is from pass.
                This statement is from continue.
                This statement is from continue.
                This statement is from continue.
                

                Pass 没有任何作用。计算不受影响。但是 continue 会回到循环顶部进行下一次计算。

                【讨论】:

                • 与其他已有答案有什么特别的区别?
                【解决方案11】:

                pass 只是继续循环或条件。它什么也没做。 continue,虽然用于跳过当前迭代,并进入下一个迭代。

                您可能会问,如果不需要,为什么要使用pass?考虑以下情况:

                text = "I am a coder."
                
                if text == "I am not a coder.":
                    print("Programming is interesting! You should try it out!")
                elif text == "I am a coder.":
                    pass
                

                pass 只是一个语法占位符,用于填充一些空间。如果您不想在特定条件签出时执行任何操作,则可以使用 pass 作为占位符。你不能只在 Python 中编写一个空的条件、循环或函数。

                【讨论】:

                  【解决方案12】:

                  pass 可以用在需要一些空函数、类或循环以供将来实现的场景,并且不需要执行任何代码。
                  continue 用于当某些条件满足时不需要的场景在一个循环中遇到,您需要跳过当前迭代并移动到下一个迭代。

                  【讨论】:

                    猜你喜欢
                    • 2013-12-20
                    • 2014-07-07
                    • 2015-02-25
                    • 1970-01-01
                    • 2011-02-11
                    • 2018-06-06
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多