When the step size is a variable, the range statement falls back to a Python for loop since the direction of the loop is unknown. The "i from a <= i < b by c" syntax specifies the direction, so it is turned into a C for loop. The difference is performance could be substantial.
This produces a Python for loop: def python_loop(Py_ssize_t a, Py_ssize_t b, Py_ssize_t c): cdef Py_ssize_t i for i in range(a, b, c): pass This produces a C for loop: def c_loop(Py_ssize_t a, Py_ssize_t b, Py_ssize_t c): cdef Py_ssize_t i for i from a <= i < b by c: pass On Mon, Oct 12, 2015, at 08:37 AM, Robert Bradshaw wrote: > On Sun, Oct 11, 2015 at 3:31 PM, Greg Ewing <greg.ew...@canterbury.ac.nz> > wrote: > > Stefan Behnel wrote: > >> > >> Hi! > >> > >> The syntax construct "for i from 0 <= i < 10" has been silently outdated > >> for years. Can we start issuing a warning that normal range() loops are > >> preferred? > > > > > > I'd be in favour of replacing it with just 'for 0 <= i < 10', > > but -1 on removing it altogether. > > > > I introduced it in Pyrex for a reason -- to clearly express > > iterations over ranges of integers with arbitrary combinations > > of open/closed endpoints, > > I agree that it expresses intent clearer than the range(...) construct. > > > for use in conjunction with C code. > > I believe that reason is still valid. > > I'm not sure why "in conjunction with C code" makes any difference to > the argument, now that the basic range loop produces the same code in > Cython. Put another way, does its clarity merit a PEP to introduce > this syntax into Python? If not, it's hard to justify in Cython given > that it is a fully redundant addition to the language. > > - Robert > _______________________________________________ > cython-devel mailing list > cython-devel@python.org > https://mail.python.org/mailman/listinfo/cython-devel _______________________________________________ cython-devel mailing list cython-devel@python.org https://mail.python.org/mailman/listinfo/cython-devel