Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 315 – 개선된 while 루프

Author:
Raymond Hettinger <python at rcn.com>, W Isaac Carroll <icarroll at pobox.com>
Status:
Rejected
Type:
Standards Track
Created:
25-Apr-2003
Python-Version:
2.5
Post-History:


Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

초록

이 PEP는 루프 코드를 더 명확하게 하고 코드 중복으로 인한 오류를 줄이기 위해 while 루프의 시작 부분에 선택적인 “do” 절을 추가할 것을 제안합니다.

공지

거부되었습니다. [1]을 참고하십시오.

이 PEP는 2006년부터 보류되었습니다. [2]를 참고하십시오.

2009년 4월에 이 PEP를 되살리려던 후속 시도는 다음 형태에 견줄 만한 문법이 나오지 않았기 때문에 성공하지 못했습니다:

while True:
    <setup code>
    if not <condition>:
        break
    <loop body>

기본적인 do-while 루프에 대해 이 PEP에서 제안한 것과 다른 대안 문법이 발견되었지만, 조건이 맨 위에 있었기 때문에 거의 지지를 얻지 못했습니다:

do ... while <cond>:
    <loop body>

언어 사용자에게는 do-while 루프가 적절했을 상황에서 내부에 if-break를 둔 while-True 형태를 사용할 것을 권장합니다.

동기

while 루프 조건을 매번 평가하기 전에 어떤 코드가 실행되어야 하는 경우가 자주 있습니다. 이 코드는 루프에 진입하기 전에 한 번 실행되는 준비 코드로서 루프 바깥에 중복되는 경우가 많습니다:

<setup code>
while <condition>:
    <loop body>
    <setup code>

문제는 중복된 코드 중 한쪽만 변경되고 다른 쪽은 변경되지 않으면 오류의 원인이 될 수 있다는 점입니다. 또한 두 번째 준비 코드는 루프의 끝에 오기 때문에 그 목적이 명확하지 않습니다.

루프 조건을 헬퍼 함수로 옮기거나 루프 본문 안의 if 문으로 옮기면 코드 중복을 방지할 수 있습니다. 하지만 루프 조건을 while 키워드와 분리하면 루프의 동작이 덜 명확해집니다:

def helper(args):
    <setup code>
    return <condition>

while helper(args):
    <loop body>

이 마지막 형태에는 루프의 else 절을 if 문의 본문에 추가해야 한다는 단점이 더 있어서, 루프의 동작을 더욱 알기 어렵게 만듭니다:

while True:
    <setup code>
    if not <condition>: break
    <loop body>

이 PEP는 while 루프에 선택적인 절을 추가하여 이러한 문제를 해결할 것을 제안하며, 이 절을 사용하면 준비 코드를 자연스러운 방식으로 표현할 수 있습니다:

do:
    <setup code>
while <condition>:
    <loop body>

이렇게 하면 루프 조건이 제자리인 while 키워드와 함께 유지되며, 코드를 중복할 필요도 없습니다.

문법

while 문의 문법은

while_stmt : "while" expression ":" suite
         ["else" ":" suite]

다음과 같이 확장됩니다:

while_stmt : ["do" ":" suite]
            "while" expression ":" suite
            ["else" ":" suite]

break와 continue의 의미

do-while 루프에서 break 문은 표준 while 루프에서와 똑같이 동작합니다. 즉, 루프 조건을 평가하거나 else 절을 실행하지 않고 즉시 루프를 종료합니다.

do-while 루프의 continue 문은 while 조건 검사로 이동합니다.

일반적으로 while 스위트가 비어 있을 때(pass 문), do-while 루프와 break 및 continue 문은 다른 언어의 do-while 의미와 일치해야 합니다.

마찬가지로 do 스위트가 비어 있을 때, do-while 루프와 break 및 continue 문은 일반 while 루프의 동작과 일치해야 합니다.

Future 문

새 키워드 “do” 때문에, 처음에는 do-while 형태를 사용하려면 다음 문이

from __future__ import do_while

필요할 것입니다.

구현

이 PEP의 첫 번째 구현은 do-while 루프를, 루프를 빠져나가는 검사가 포함된 무한 루프로 컴파일할 수 있습니다.

참고 문헌