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
