Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #37386 > unrolled thread

Re: Understanding while...else...

Started byOscar Benjamin <oscar.j.benjamin@gmail.com>
First post2013-01-23 00:39 +0000
Last post2013-01-23 00:39 +0000
Articles 1 — 1 participant

Back to article view | Back to comp.lang.python

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: Understanding while...else... Oscar Benjamin <oscar.j.benjamin@gmail.com> - 2013-01-23 00:39 +0000

#37386 — Re: Understanding while...else...

FromOscar Benjamin <oscar.j.benjamin@gmail.com>
Date2013-01-23 00:39 +0000
SubjectRe: Understanding while...else...
Message-ID<mailman.849.1358901582.2939.python-list@python.org>
On 22 January 2013 23:41, Terry Reedy <tjreedy@udel.edu> wrote:
> On 1/22/2013 3:09 PM, Ethan Furman wrote:
>>
>> On 01/22/2013 09:44 AM, Terry Reedy wrote:
>>>
[SNIP]
>>> The else clause is executed if and when the condition is false.
>>> Now use a real Python while statement to do the *same
>>> thing*.
>>>
>>> while n > 0:
>>>    n -= 1
>>> else:
>>>    n = None
>>
>>
>> I understand how it works (although it did take a while for it to sink
>> in); my gripe, and probably why it is misunderstood so often, is that
>> nine times out of ten when I /want/ to use a while-else or for-else I
>> only want the true/false check /once/, at the beginning of the loop.
>
>
> I do not understand what you are saying. There already is only one
> true/false check, at the beginning of the loop. If you only want the check
> *performed* once, you would use if-else. But I presume you know this.

I think he meant that he would use the else clause more often if it
had the semantics so that the two blocks below were equivalent:

# Version 1
while condition:
    # stuff
else:
    # other stuff

# Version 2
if condition:
    while condition:
        # stuff
else:
    # other stuff

So he wants a convenient way to execute code only if the loop
performed zero iterations. I think that often when people are confused
about the else clause on while loops it is because they expect this
behaviour (which would also be useful). The same confusion arises with
for loops where people expect the else clause to execute if the
iterable was empty so that these would be equivalent:

# Version 1
for x in iterable:
    # stuff
else:
    # other stuff

# Version 2
iterated = False
for x in iterable:
    iterated = True
    # stuff
if not iterated:
    # other stuff


Oscar

[toc] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web