Terry Reedy tjreedy at udel.edu
Sat Oct 18 20:31:25 CEST 2008

Gandalf wrote:
> On Oct 18, 12:39 pm, Duncan Booth <duncan.bo... at invalid.invalid>
> wrote:
>> Gandalf <goldn... at gmail.com> wrote:
>>> how can I do width python a normal for loop width tree conditions like
>>> for example :
>>> for x=1;x<=100;x+x:
>>>     print x
>> What you wrote would appear to be an infinite loop so I'll assume you meant
>> to assign something to x each time round the loop as well. The simple
>> Python translation of what I think you meant would be:
>> x = 1
>> while x <= 100:
>>    print x
>>    x += x
>> If you really insist on doing it with a for loop:
>> def doubling(start, limit):
>>     x = start
>>     while x <= limit:
>>         yield x
>>         x += x
>> ...
>> for x in doubling(1, 100):
>>     print x
> I was hopping to describe it with only one command. most of the
> languages I know use this.
> It seems weird to me their is no such thing in python. it's not that I
> can't fined a solution it's all about saving code

Python: 'makes common things easy and uncommon things possible'.

The large majority of use cases for iteration are iterating though 
sequences, actual and virtual, including integers with a constant step 
size.  Python make that trivial to do and clear to read. Your example is 
trivially written as

for i in range(11):
   print 2**i

Python provide while loops for more fine-grain control, and a protocol 
so *reuseable* iterators can plug into for loops. Duncan showed you 
both.  If you *need* a doubling loop variable once, you probably need 
one more than once, and the cost of the doubling generator is amortized 
over all such uses.  Any Python proprammer should definitely know how to 
write such a thing without hardly thinking.  We can squeeze a line out 
of this particular example:

def doubling(value, limit):
   while value <= limit:
     yield value
     value += value

Terry Jan Reedy

More information about the Python-list mailing list