PEP: statements in control structures (Re: Conditional Expressions don't solve the problem)
Huaiyu Zhu
huaiyu at gauss.almadan.ibm.com
Thu Oct 18 22:02:36 EDT 2001
Carl Banks gave some well-thought out objection, which I'd like to summarize
them as:
(1) There may be many statements before the condition, resulting in long
while-lines.
(2) The else-clause for while is not necessary for while 1.
But then I was reminded of the examples I collected by searching for break
statements in the source distribution. Most usages are similar to
./Demo/pdist/makechangelog.py:
--------------------------------------------(1)
while 1:
file = getnextfile(f)
if not file: break
revs = []
while 1:
rev = getnextrev(f, file)
if not rev:
break
revs.append(rev)
if revs:
allrevs[len(allrevs):] = revs
which can be changed to:
while file = getnextfile(f); file:
revs = []
while rev = getnextrev(f, file); rev:
revs.append(rev)
if revs:
allrevs[len(allrevs):] = revs
or better still
while file = getnextfile(f); file:
revs = []
while rev = getnextrev(f, file); rev:
revs.append(rev)
allrevs += revs
This is more readable to me, because the condition is on the same line as
while (esp. in a color editor). In practical terms I do not see why this is
ugly.
>I would suggest something more along these line (fleshing out the
>example a little):
>
> suppose:
> m = re.search (somthing)
> if m:
> do_something_with (m)
> elsuppose:
> m = re.search (somthing_else)
> if m:
> do_something_else_with (m)
> else:
> raise some_exception;
If we are to add more keywords, maybe this?
A
branch:
B1
if C1:
D1
else:
B2
if C2:
D2
else:
B3
E
or even this?
A
B1
if C1:
D1
else:
B2
andif C2:
D2
else:
B3
E
But I don't think any new keyword for this purpose will ever get in.
>I would suggest something like:
>
> do:
> <statements>
> while <condition>:
> <statements>
>
>with the do part optional. The exact keywords and semantics I don't
>care about. But, like I said, I have no problem with "while 1:".
This is cute, but it cannot work unless the current while statement is
phased out. Otherwise, if I'm looking at a piece of code like
....
....
while ...
....
....
it would not be clear if the while is in a new loop or previous loop.
Presumably this would be allowed
do:
A
while B:
C
while D:
...
Huaiyu
More information about the Python-list
mailing list