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:
번역·라이선스 안내
이 비공식 한국어 번역은 원문 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 루프를, 루프를 빠져나가는 검사가 포함된 무한 루프로 컴파일할 수 있습니다.
참고 문헌
Copyright
This document is placed in the public domain.