[Python-ideas] BUG in standard while statement
joejev at gmail.com
Wed Sep 9 19:15:04 CEST 2015
This appears as intended. The body of the while condition is executed each
time the condition is checked. In the first case, you are creating a single
instance of repeat, and then calling bool on the expression with each
iteration of the loop. With the second case, you are constructing a _new_
repeat instance each time. Think about the difference between:
a = should_stop()
One would expect should_stop to be called each time in the first case; but,
in the second case it is only called once.
With all that said, I think you want to use the __iter__ and __next__
protocols to implement this in a more supported way.
On Wed, Sep 9, 2015 at 1:10 PM, Stephan Sahm <Stephan.Sahm at gmx.de> wrote:
> Dear all
> I found a BUG in the standard while statement, which appears both in
> python 2.7 and python 3.4 on my system.
> It usually won't appear because I only stumbled upon it after trying to
> implement a nice repeat structure. Look:
> class repeat(object):
> def __init__(self, n):
> self.n = n
> def __bool__(self):
> self.n -= 1
> return self.n >= 0
> a = repeat(2)
> the meaning of the above is that bool(a) returns True 2-times, and after
> that always False.
> Now executing
> while a:
> will in fact print 'foo' two times. HOWEVER ;-) ....
> while repeat(2):
> will go on and go on, printing 'foo' until I kill it.
> Please comment, explain or recommend this further if you also think that
> both while statements should behave identically.
> hoping for responses,
> Python-ideas mailing list
> Python-ideas at python.org
> Code of Conduct: http://python.org/psf/codeofconduct/
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Python-ideas