[Python-ideas] Immemorial desire for "do-while"-like construction
Jan Kaliszewski
zuo at chopin.edu.pl
Thu Jul 16 02:16:08 CEST 2009
16-07-2009 o 00:54 Chris Rebert <pyideas at rebertia.com> wrote:
> You can fix that by just writing it as:
>
> while True:
> SOME
> ACTIONS
> HERE
> if not CONDITION: break
Yeah, but it's not the same :) because eyes must look for the actual loop
condition somewhere-within-the-loop (after all, "while True" is common
idiom with large field of usage, not only in such situations...).
Another solution I invented for myself is to use object which once
evaluates to True, then always to False, e.g.:
from itertools import chain, repeat
class FirstTrue(object):
def __init__(self):
self._iter = chain([True], repeat(False))
def __nonzero__(self): # __bool__ for Py3k
return next(self._iter)
Usage:
first = FirstTrue()
while first or CONDITION:
SOME
ACTIONS
HERE
or, if we want to *evaluate* CONDITION also at first time:
first = FirstTrue()
while CONDITION or first:
SOME
ACTIONS
HERE
Wouldn't be nice to have such factory as built-in or in itertools?
Best regards,
*j
--
Jan Kaliszewski <zuo at chopin.edu.pl>
More information about the Python-ideas
mailing list