Pythonのforループで `continue`と` pass`の間に違いはありますか?


274

2つのPythonのキーワード間の有意な差があるcontinuepassの例のようには、

for element in some_list:
    if not element:
        pass

そして

for element in some_list:
    if not element:
        continue

知っておくべき?


4
S.Lott @:例:while True:; pass # Busy-wait for keyboard interrupt (Ctrl+C)Pythonのドキュメントは、私はそれが晴れ、それはこの場合には継続して同等に振る舞うか、他の何かを意図していた見つけることができませんでしたことを、方法で私を混同しました。最初の文「passステートメントは何もしません。」私の質問に対するすべての回答を特徴づけていますが、どういうわけか私の目を引くことができませんでした。
Aufwind 2012

回答:


400

はい、彼らは完全に異なることをします。 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

7
私はあなたの答えに完全に同意します。しかし、私はまだpassキーワードに関して質問がありますか?と必要ですが、なぜですか?ありがとう
Hardik Gajjar 2015

34
@HardikGajjar:passキーワードは何もしないので、構文的にインデントされたスイートが必要だが、何もしたくない場合にのみ役立ちます。一般的な例は、いくつかの例外を無視する場合はを使用しますexcept SomeException: pass。他にも多くのユースケースがあります。何も実行しない他のステートメントを使用することができるため(例えば0、効果のない完全に有効なステートメントであるなど)、このためのキーワードは厳密には必要ありませんが、このためのキーワードがあると、何もしたくないことについてより明確に。
Sven Marnach、2015

@SvenMarnachは、例外を扱うのに文体的に眉をひそめていpassますか?
ビョークは1

@MikePalmiceまったくありません。
Matt M.

73

はい、違いがあります。「ここに実行するコードがない」ことcontinuepass意味する間、ループを次の反復で強制的に開始し、残りまたはループ本体を続行します。

これらを実行して違いを確認してください:

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

23

continueループの先頭に戻ります。pass処理を続行します。

パスがループの最後にある場合、フローはループの先頭に戻るため、差は無視できます。


11

あなたの例では、両方のステートメントがループの終わりに現れるので、違いはありません。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



3

forループでのパスと継続の違い:

では、なぜpythonを渡すのですか?

空のクラス、メソッド、またはブロックを作成する場合。

例:

class MyException(Exception):
    pass


try:
   1/0
 except:
   pass

上記の例で「pass」を指定しないと、IndentationErrorがスローされます。


1
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.

パスは何もしません。計算は影響を受けません。しかし、次の計算に進むために、ループの先頭に戻ります。


3
すでに利用可能な他の回答との特別な違いは何ですか?
BHUVANESH MOHANKUMAR 2017年

1

このように考えてください:

パス: Pythonはインデントのみを処理します。他の言語とは異なり、空の波括弧はありません。

したがって、条件がtrueの場合に何もしない場合は、pass以外のオプションはありません。

続行:これはループの場合にのみ役立ちます。値の範囲について、その特定のパスに対して条件がtrueになった後、ループの残りのステートメントを実行したくない場合は、続行を使用する必要があります。


したがって、条件がtrueの場合に何もしない場合は、pass以外のオプションはありません->これは正確ではありません。たとえば、上記のSven Marnachのコメントを参照してください。
パトリック2018年

1
@patrick申し訳ありませんが、彼は正しいです。たとえば、変数がfloatとintの両方になる可能性があり、すべてのintで演算を実行したい場合は、floatをチェックするifステートメントを使用しpass、ステートメントがif Trueであれば、操作を実行しますFalse。これにより、多目的リストの効率的なスキャンが可能になります。
1313e

0

pass将来の実装のためにいくつかの空の関数、クラス、またはループが必要で、コードを実行する必要がないシナリオで使用できます。
continueループ内で何らかの条件が満たされていない場合に、現在の反復をスキップして次の反復に移動する必要があるシナリオで使用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.