PEP: 315 Title: Enhanced While Loop Version: $Revision$ Last-Modified: $Date$ Author: W Isaac Carroll Status: Draft Type: Standards Track Content-Type: text/plain Created: 25-Apr-2003 Python-Version: 2.4 Post-History: Abstract This PEP proposes adding an optional "do" clause to the beginning of the while loop to make loop code clearer and reduce errors caused by code duplication. Motivation It is often necessary for some code to be executed before each evaluation of the while loop condition. This code is often duplicated outside the loop, as setup code that executes once before entering the loop: while : The problem is that duplicated code can be a source of errors if one instance is changed but the other is not. Also, the purpose of the second instance of the setup code is not clear because it comes at the end of the loop. It is possible to prevent code duplication by moving the loop condition into a helper function, or an if statement in the loop body. However, separating the loop condition from the while keyword makes the behavior of the loop less clear: def helper(args): return while helper(args): This last form has the additional drawback of requiring the loop's else clause to be added to the body of the if statement, further obscuring the loop's behavior: while True: if not : break This PEP proposes to solve these problems by adding an optional clause to the while loop, which allows the setup code to be expressed in a natural way: do: while : This keeps the loop condition with the while keyword where it belongs, and does not require code to be duplicated. Syntax The syntax of the while statement while_stmt : "while" expression ":" suite ["else" ":" suite] is extended as follows: while_stmt : ["do" ":" suite] "while" expression ":" suite ["else" ":" suite] Semantics of break and continue In the do-while loop the break statement will behave the same as in the standard while loop: It will immediately terminate the loop without evaluating the loop condition or executing the else clause. A continue statement in the do-while loop will behave somewhat differently than in the standard while loop. Instead of jumping back to the loop condition, it will jump to the beginning of the first suite of the loop. This is to ensure that the setup code has a chance to do its job before the condition is evaluated. Future Statement Because of the new keyword "do", the statement from __future__ import do_while will initially be required to use the do-while form. Implementation The first implementation of this PEP can compile the do-while loop as an infinite loop with a test that exits the loop. Copyright This document is placed in the public domain. Local Variables: mode: indented-text indent-tabs-mode: nil sentence-end-double-space: t fill-column: 75 End: