Hi,

Dag Sverre Seljebotn wrote:
> Magnus Lie Hetland wrote:
>> For the for-from loop, this may be intended -- as you say, it mimics  
>> the C behavior (although it seems to fly in the face of "Python  
>> intuition"): Even with the existing Cython semantics, getstep() will  
>> be called after *every iteration*.
>>
>> It seems to me that in
>>
>>    for 0 <= i < n by getstep(): pass
>>
>> one would expect (in Python) that the step expression be evaluated  
>> only once. If that is not the case, fine. Then the for-from loop can  
>> safely be left alone as it is.
>>   
> I think so -- the for-from loop is a C idiom from which one can expect C 
> behaviour from my perspective, and if this has been the behaviour so far 
> then backward compatability alone speaks against altering it. The range 
> optimization has been around for much shorter and clearly should behave 
> as Python range, so that story is different.

I vote for a) diverging behaviour between for-range and for-from for the
loop-variable after loop termination, and b) the obvious evaluate-once
semantics for the range() optimisation and the obvious (?)
evaluate-on-each-step semantics for the for-from loop.

And while I'm fine with removing the emphases from the for-from loop in the
docs, I really don't think we should remove it from the language. However,
it needs to be stated in the docs that it follows the semantics of the C
for loop as far as possible, and that the usual Python for-range pattern is
preferred for readability and semantic clarity.

Stefan
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to