파이썬에서 for 루프에서`continue`와`pass` 사이에 차이점이 있습니까?


274

두 개의 python 키워드 continuepass예제에서 와 같은 중요한 차이점이 있습니까?

for element in some_list:
    if not element:
        pass

for element in some_list:
    if not element:
        continue

알고 있어야합니까?


4
S. 로트 @ : 예 : while True:; pass # Busy-wait for keyboard interrupt (Ctrl+C)파이썬 문서 내가 다른 의도이 경우 또는 무언가에 계속 해당 동작 분명히 날씨 찾지 못했음을, 길에서 나를 혼동. 첫 번째 문장은 "통과 진술은 아무것도하지 않는다"는 것입니다. 내 질문에 대한 모든 대답의 특징을 나타내지 만 어떻게 든 내 눈을 사로 잡지 못했습니다.
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
나는 당신의 대답에 전적으로 동의합니다. 하지만 여전히 패스 키워드에 관한 질문이 필요합니까? 필요한데 왜? 감사합니다
Hardik Gajjar

34
@HardikGajjar : pass키워드는 아무 것도하지 않기 때문에 구문 적으로 들여 쓰기 모음이 필요하지만 아무 것도하고 싶지 않을 때만 유용합니다. 일반적인 예는 일부 예외를 무시하려면을 사용하는 것 except SomeException: pass입니다. 다른 많은 사용 사례도 있습니다. 아무 것도하지 않는 다른 문장을 사용할 수 있기 때문에 키워드를 꼭 필요로하지는 않을 것입니다 (예 : 0효과가없는 완벽하게 유효한 문장). 그러나 이것에 대한 키워드를 가지면 아무것도하고 싶지 않다는 것에 대해 더 명백합니다.
Sven Marnach

@SvenMarnach는 예외를 처리하기 위해 문체 적으로 찡그림 pass입니까?
Bjorks 1 위 팬

@MikePalmice 전혀 아닙니다.
Matt M.

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 루프에서 계속됩니다.

그렇다면 왜 파이썬을 전달합니까?

빈 클래스, 메소드 또는 블록을 작성하려는 경우.

예 :

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
이미 사용 가능한 다른 답변과의 특별한 차이점은 무엇입니까?
바네스 MOHANKUMAR

1

이런 식으로 생각하십시오 :

통과하다: 파이썬은 들여 쓰기에 순전히 작동합니다! 다른 언어와 달리 빈 중괄호는 없습니다.

따라서 조건이 참일 때 아무것도하지 않으려면 통과 이외의 옵션이 없습니다.

계속 : 이것은 루프의 경우에만 유용합니다. 특정 범위의 값에 대해 특정 패스에 대해 해당 조건이 충족 된 후에 루프의 나머지 명령문을 실행하지 않으려면 continue를 사용해야합니다.


따라서 조건이 참인 경우 아무것도하지 않으려면 pass 이외의 옵션이 없습니다 -> 정확하지 않습니다. 예를 들어 위의 Sven Marnach의 의견을 참조하십시오.
패트릭

1
@patrick 미안하지만 그는 맞습니다. 예를 들어 변수가 float 및 int 일 수 있고 모든 int에 대해 작업을 수행하려는 경우 float을 확인하는 if 문을 사용 pass하고 명령문이 True이면 작업을 수행하십시오 False. 이를 통해 다목적 목록을 효율적으로 스캔 할 수 있습니다.
1313e

0

pass미래의 구현을 위해 빈 함수, 클래스 또는 루프가 필요할 때 시나리오에서 사용할 수 있으며 코드를 실행할 필요가 없습니다.
continue루프 내에서 일부 조건이 충족되지 않고 현재 반복을 건너 뛰고 다음 반복으로 이동해야하는 경우 시나리오에서 사용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.