Есть ли разница между `continue` и` pass` в цикле for в python?


274

Есть ли существенная разница между двумя ключевыми словами python continueи passкак в примерах

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)в документации по питону меня смутило то, что я не нашел ясной погоды, он ведет себя как продолжение в этом случае, или что-то еще было задумано. Первое предложение «Pass Pass ничего не делает». характеризует все ответы на мой вопрос, но почему-то это не бросилось в глаза.
Aufwind

Ответы:


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, это нужно? а нужно но зачем? Спасибо
Хардик Гаджар

34
@HardikGajjar: Поскольку passключевое слово ничего не делает, оно полезно только тогда, когда вам нужен синтаксис с отступом, но вы не хотите ничего делать. Типичный пример: если вы хотите игнорировать какое-то исключение, вы используете except SomeException: pass. Есть также много других вариантов использования. Вам не нужно строго ключевое слово для этого, так как вы можете использовать любой другой оператор, который ничего не делает (например 0, это совершенно правильный оператор, который не имеет эффекта), но наличие ключевого слова для этого позволяет вам быть более явно о нежелании что-либо делать.
Свен Марнач

@SvenMarnach стилистически не одобряет обработку исключений pass?
3pitt

@MikePalmice Совсем нет.
Мэтт М.

73

Да, есть разница. 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

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

5

Да, есть разница. Continueфактически пропускает оставшуюся часть текущей итерации цикла (возвращаясь к началу). Passэто пустое утверждение, которое ничего не делает.

Смотрите документы по питону



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
В чем особая разница с другими уже доступными ответами?
БХУВАНЕШ МОХАНКУМАР

1

Рассмотрим это так:

Pass: Python работает исключительно на отступах! Там нет пустых фигурных скобок, в отличие от других языков.

Итак, если вы хотите ничего не делать в случае, если условие истинно, нет другого выбора, кроме pass.

Продолжить: это полезно только в случае циклов. В случае, если для диапазона значений вы не хотите выполнять оставшиеся операторы цикла после того, как это условие истинно для данного конкретного прохода, вам придется использовать продолжить.


Итак, если вы хотите ничего не делать в случае, если условие истинно, нет другого выбора, кроме pass -> это неверно, см., Например, комментарий Свена Марнаха выше.
Патрик

1
@patrick Извините, но он прав. В случае, когда, например, переменная может быть как float, так и int, и вы хотите выполнить операцию со всеми типами int, тогда вы можете просто использовать оператор if, который проверяет значения с плавающей точкой, используйте оператор passif, если Trueи выполнить операцию, если она есть False. Это позволяет эффективно сканировать многоцелевые списки.
1313e,

0

passможет использоваться в сценариях, когда вам понадобятся некоторые пустые функции, классы или циклы для будущих реализаций, и нет необходимости выполнять какой-либо код.
continueиспользуется в сценариях, когда нет, когда какое-либо условие выполнено в цикле, и вам нужно пропустить текущую итерацию и перейти к следующей.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.