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>
이 PEP에서 제안한 것에 대한 구문 대안이 기본적인 do-while 루프에 대해 발견되었지만, 조건이 상단에 있었기 때문에 지지를 거의 얻지 못했습니다:
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”로 인해, 다음 문은
from __future__ import do_while
처음에는 do-while 형태를 사용해야 할 것입니다.
구현
이 PEP의 첫 번째 구현은 do-while 루프를 루프를 종료하는 검사가 포함된 무한 루프로 컴파일할 수 있습니다.
참고 문헌
Copyright
This document is placed in the public domain.