[Cython] can we deprecate for-from loops?
Josh Ayers
josh at ayers.pw
Mon Oct 12 14:40:54 EDT 2015
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.ewing at 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 at python.org
> https://mail.python.org/mailman/listinfo/cython-devel
More information about the cython-devel
mailing list