파이썬에서“continue”문장의 사용 예?


177

정의continue문은 다음과 같습니다

continue문은 루프의 다음 반복을 계속.

좋은 코드 예제를 찾을 수 없습니다.

누군가 continue가 필요한 간단한 사례를 제안 할 수 있습니까?

답변:


218

다음은 간단한 예입니다.

for letter in 'Django':    
    if letter == 'D':
        continue
    print("Current Letter: " + letter)

출력은 다음과 같습니다.

Current Letter: j
Current Letter: a
Current Letter: n
Current Letter: g
Current Letter: o

루프의 다음 반복을 계속합니다.


1
지난 3 ~ 4 일 동안 계속 생각하고 있는데 왜 '계속'문구가 필요한지에 대해이 게시물을보고 QA에 도움이됩니다.
Freddy

3
여기에서 우리가 파이썬 스크립트 (크론 작업)를 작성하고 큰 값을 반복하고 일부 예외가 발생하면 크론 작업이 중지되고 다음 날에만 그 사실을 알 수 있습니다. 예외적으로 메일 보내기 기능을 작성할 수 있지만 여전히 실행이 중지됩니다.
Snehal Parmar

2
이것은 무엇을 보여 continue않습니다하지만 당신은 할 수있을 때, 지나치게 유용한 아니다if letter != 'D': print 'Current Letter:', letter
Chris_Rands

Pray / remove r 또는 Fast / remove를 선택했을 것입니다.
Benjamin Crouzier

102

"사업 중단"에 도달하기 전에 충족해야 할 조건이 많은 곳에서 계속 루프를 사용하고 싶습니다. 따라서 다음과 같은 코드 대신

for x, y in zip(a, b):
    if x > y:
        z = calculate_z(x, y)
        if y - z < x:
            y = min(y, z)
            if x ** 2 - y ** 2 > 0:
                lots()
                of()
                code()
                here()

나는 이와 같은 코드를 얻는다 :

for x, y in zip(a, b):
    if x <= y:
        continue
    z = calculate_z(x, y)
    if y - z >= x:
        continue
    y = min(y, z)
    if x ** 2 - y ** 2 <= 0:
        continue
    lots()
    of()
    code()
    here()

이 방법으로 그렇게하면 매우 깊이 중첩 된 코드를 피할 수 있습니다. 또한 가장 자주 발생하는 경우를 먼저 제거하여 루프를 최적화하는 것이 쉽습니다. 따라서 다른 쇼 토퍼가 없을 때 드물지만 중요한 경우 (예 : 제수는 0) 만 처리하면됩니다.


2
따라서 "계속"은 들여 쓰기를 줄임으로써 가독성을 위해 주로 사용됩니다. "계속"이 표현력을 더하는지 궁금합니다.
JohnG

14
continue이 방식으로 사용 하는 것은을 사용하는 것과 유사합니다 GOTO. 그러나 이것이 올바른 사용 방법 GOTO입니다.
dotancohen

1
@JohnG 나는 그것이 런타임에 비쌀 수는 있지만, 그것 없이는 재생할 수없는 continue (또는 그 문제에 대한 휴식)의 사용이 있다고 생각하지 않습니다.
Sparr

18

일반적으로 continue가 필요 / 유용한 상황은 루프의 나머지 코드를 건너 뛰고 반복을 계속하려는 경우입니다.

필자는 if 문을 사용하여 동일한 논리를 제공 할 수 있기 때문에 실제로 필요하다고 생각하지 않지만 코드의 가독성을 높이는 것이 유용 할 수 있습니다.


23
사용 if <condition>: continue하지 if not <condition>: ...않고 쓰면 필요할 수있는 들여 쓰기 수준을 피하기 보다는 오히려 사용하는 것이 좋습니다 .
Dan D.

1
JohnG와 비슷한 qn을 게시하려고했지만 그가 알고 싶은 것을 이미 물었다는 것을 알았습니다. 여기에있는 모든 응답을 읽는 것이 도움이되었지만 여전히 한 가지에 대해 확신해야합니다. continue문 을 사용할 때마다 기본적으로 조건부 테스트 섹션에서 벗어나 루프 반복을 진행할 수 있습니다. 다음 반복으로? 이것이을 사용하는 것보다 낫다는 것은 분명하지 않습니다 else. 가독성과 런타임 성능이 향상 되었습니까?
AKKO

"필요하지 않다"... 파이썬 제작자는 다르게 생각했다.
Jean-François Fabre

12
import random  

for i in range(20):  
    x = random.randint(-5,5)  
    if x == 0: continue  
    print 1/x  

continue는 매우 중요한 제어문입니다. 위의 코드는 일반적인 응용 프로그램을 나타내며 0으로 나누는 결과를 피할 수 있습니다. 프로그램의 출력을 저장해야 할 때 자주 사용하지만 프로그램이 충돌하면 출력을 저장하고 싶지 않습니다. 위의 예제를 테스트하려면 마지막 명령문을 print 1 / float (x)로 바꾸십시오. 그렇지 않으면 randint가 정수를 리턴하므로 분수가있을 때마다 0을 얻습니다. 명확성을 위해 생략했습니다.


10

어떤 사람들은 가독성에 대해 논평했습니다. "아, 가독성이 그다지 도움이되지 않습니까?

메인 코드 전에 확인이 필요하다고 가정하십시오.

if precondition_fails(message): continue

''' main code here '''

어쨌든 코드를 변경하지 않고 메인 코드를 작성한 후에이 작업을 수행 할 수 있습니다 . 코드를 비교하면 기본 코드에 대한 간격 변경이 없으므로 "계속"이 추가 된 행만 강조 표시됩니다.

프로덕션 코드의 breakfix를 수행해야한다고 상상해보십시오. 계속해서 계속해서 줄을 추가하는 것으로 나타났습니다. 코드를 검토 할 때 이것이 유일한 변화임을 쉽게 알 수 있습니다. 메인 코드를 if / else로 래핑하기 시작하면 간격 변경을 무시하지 않는 한 diff는 새로 들여 쓴 코드를 강조 표시합니다. 특히 Python에서 위험합니다. 짧은 통지로 코드를 롤아웃 해야하는 상황이 아니라면이 점을 완전히 이해하지 못할 수도 있습니다.


5
def filter_out_colors(elements):
  colors = ['red', 'green']
  result = []
  for element in elements:
    if element in colors:
       continue # skip the element
    # You can do whatever here
    result.append(element)
  return result

  >>> filter_out_colors(['lemon', 'orange', 'red', 'pear'])
  ['lemon', 'orange', 'pear']

4
그러나 무엇 않는 continue문은 추가 여기에? 를 사용하여 제거 할 수 있으며 element not in colors코드는 읽을 수 있습니다.
ekhumoro

4

3과 5의 배수가 아닌 모든 숫자를 인쇄하고 싶다고 가정 해 봅시다.

for x in range(0, 101):
    if x % 3 ==0 or x % 5 == 0:
        continue
        #no more code is executed, we go to the next number 
    print x

또한 바로 사용할 수있는 if x %3 == 0 or x % 5 == 0:, pass, else:,print x
와일드 카드

올바른 방법은 continue 또는 not 연산자를 사용하는 것입니다. 왜 패스를 불필요하게 사용합니까?
ytpillai

나는 당신의 방식을 더 좋아합니다 (따라서 공감). 내가 사용할 필요 가 있으면 정렬 하려고이 페이지에 왔습니다 continue. 필자의 결론은 필요 가 없지만 어떤 경우에는 (이와 같은) 코드를 사용하여 더 읽기 쉽다는 것이다 continue. 아주 좋은 예입니다.
와일드 카드

3

IF를 사용하여 수행 할 수 있으므로 반드시 필요한 것은 아니지만 런타임에 더 읽기 쉽고 비용도 저렴합니다.

데이터가 일부 요구 사항을 충족하지 않으면 루프에서 반복을 건너 뛰기 위해 사용합니다.

# List of times at which git commits were done.
# Formatted in hour, minutes in tuples.
# Note the last one has some fantasy.
commit_times = [(8,20), (9,30), (11, 45), (15, 50), (17, 45), (27, 132)]

for time in commit_times:
    hour = time[0]
    minutes = time[1]

    # If the hour is not between 0 and 24
    # and the minutes not between 0 and 59 then we know something is wrong.
    # Then we don't want to use this value,
    # we skip directly to the next iteration in the loop.
    if not (0 <= hour <= 24 and 0 <= minutes <= 59):
        continue

    # From here you know the time format in the tuples is reliable.
    # Apply some logic based on time.
    print("Someone commited at {h}:{m}".format(h=hour, m=minutes))

산출:

Someone commited at 8:20
Someone commited at 9:30
Someone commited at 11:45
Someone commited at 15:50
Someone commited at 17:45

당신이 볼 수 있듯이, 잘못된 값은 continue진술 후에 그것을 만들지 못했습니다 .


ifcontinue모든 코드가 블록에 포함 된 경우 에만 수행 할 수 있습니다 . 블록 continue밖에있는 코드를 건너 뜁니다 if.
bryc

왜 24 시간 을 포함하지만 은 60을 제외합니까?
Patrick Artner

특별한 이유는 하나의 예일뿐입니다. 자유롭게 편집하십시오
Bastian

1

예를 들어 변수 값에 따라 다른 작업을 수행하려는 경우 :

my_var = 1
for items in range(0,100):
    if my_var < 10:
        continue
    elif my_var == 10:
        print("hit")
    elif my_var > 10:
        print("passed")
    my_var = my_var + 1

위의 예 break에서 인터프리터를 사용 하면 루프를 건너 뜁니다. 그러나 continueif-elif 문만 건너 뛰고 루프의 다음 항목으로 바로 이동합니다.


3
첫 번째 조건이 항상 참이므로 예제는 아무 것도 인쇄하지 않습니다. 의 초기 값을 가정 my_var의이 0.
Dan D.

나는 단순히 오래된 코드의 예를 수정했다. var의 원래 값은 0이 아니며 원래 부분이 없으므로 편의를 위해 증가 부분이 추가되었습니다. 그것은 예제이며 그 가치는 중요하지 않기 때문에 괜찮습니다.
jonathan.hepp

9
괜찮습니다. 를 사용하는 것은 좋지 않습니다 continue.
John Machin

3
그리고 첫 번째 elif는이어야합니다 if. 코드는 당신이하고있는 일을 알고있는 것처럼 보이지 않습니다.
John Machin

이것은 나쁜 예입니다
patrick

0

continue 다음 반복까지 루프에서 나머지 코드를 건너 뜁니다.

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