This is definitely a corner case -- and it may be an intentional  
incompatibility with Python (and, for all I know, I may have missed  
some documentation on it somewhere), but ... here goes:

After a for-loop in Python, the index variable will retain its last  
value. E.g.:

   for i in range(10): pass
   print i
   # Prints out 9

In Cython, however, standard C-semantics are used for the counting for- 
loops, so the index variable is incremented one step beyond the value  
it had in the last iteration.

I just wrote some code where this was an issue. It's easy to fix, of  
course (just use a statement like "i -= 1" or something) -- but it  
does mean an incompatibility between Python and Cython...

I realise that adding an "i -= 1" statement in general, as a blanket  
solution, would be rather wasteful (as most code doesn't rely on this  
property). Perhaps it would be possible to do some analysis on whether  
the index variable is used without modification later? (I realise that  
this is intractable in the general case, but perhaps there could be  
some well-defined rules?)

- M

-- 
Magnus Lie Hetland
http://hetland.org


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

Reply via email to