[Python-ideas] Is this PEP-able? for X in ListY while conditionZ:

David Mertz mertz at gnosis.cx
Tue Jun 25 20:58:37 CEST 2013


Oh... just to clarify my comment.  I think readers will recognize the
intent.  Obviously I didn't mean that a (hypothetical) "while" clause in a
comprehension would *always* be equivalent to an "if" clause (but faster).
I just meant to illustrate what seems like a common use case of some test
that *becomes* true after a number of checks.


On Tue, Jun 25, 2013 at 9:55 AM, David Mertz <mertz at gnosis.cx> wrote:

> I'm not quite certain if this is what the OP is proposing, but I think
> that extending comprehensions to allow a 'while' clause would be intuitive
> and somewhat useful.  It's true that itertools.takewhile() basically gets
> us the same thing, but actual syntax would be nice, and also more
> straightforward for comprehensions other than generator comprehensions.
> E.g.
>
>   attendees = {guest:guest.plus_N for guest in waiting_list while not
> room_full()}
>
> This would actually produce the same result as:
>
>   attendees = {guest:guest.plus_N for guest in waiting_list if not
> room_full()}
>
> But it would save the extra looping over a bunch of final False values of
> 'room_full()'.
>
> On Tue, Jun 25, 2013 at 6:35 AM, <jimjhb at aol.com> wrote:
>
>> Syntax:
>>
>>  for X in ListY while conditionZ:
>>
>>  The 'for' loop would proceed as long as conditionZ remains true.
>>
>>  The motivation is to be able to make use of all the great aspects of
>> the python 'for' (no indexing or explicit
>> end condition check, etc.) and at the same time avoiding a 'break' from
>> the 'for'.
>>
>>  (NOTE:  Many people are being taught to avoid 'break' and 'continue' at
>> all costs, so they instead convert
>> the clean 'for' into a less-clean 'while'.  Or they just let the 'for'
>> run out.  You can argue against this teaching
>> practice (at least for Python) but that doesn't mean it's not prevalent
>> and prevailing.)
>>
>>  [People who avoid the 'break' by functionalizing an inner portion of
>> the loop are just kidding themselves and making their own code worse,
>> IMO. Takewhile from itertools also works, but that's clumsy and wordy as
>> well.]
>>
>>  I'm not super familiar with CPython, but I'm pretty sure I could get
>> this up and working without too much effort.
>>
>>  Please note that I don't feel the answer to this is 'just use break'.
>>  Programmers are now being taught to avoid 'break' and 'continue' as if
>> they were 'goto's.  The result (now) is that people are avoiding the 'for'
>> (with its GREAT properties) because they can't break out of it.
>>
>>  Comments and Questions welcome.
>>
>>  Thanks.
>>
>> _______________________________________________
>> Python-ideas mailing list
>> Python-ideas at python.org
>> http://mail.python.org/mailman/listinfo/python-ideas
>>
>>
>
>
> --
> Keeping medicines from the bloodstreams of the sick; food
> from the bellies of the hungry; books from the hands of the
> uneducated; technology from the underdeveloped; and putting
> advocates of freedom in prisons.  Intellectual property is
> to the 21st century what the slave trade was to the 16th.
>



-- 
Keeping medicines from the bloodstreams of the sick; food
from the bellies of the hungry; books from the hands of the
uneducated; technology from the underdeveloped; and putting
advocates of freedom in prisons.  Intellectual property is
to the 21st century what the slave trade was to the 16th.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20130625/6f6a6203/attachment.html>


More information about the Python-ideas mailing list