Dag Sverre Seljebotn wrote: > Robert Bradshaw wrote: > >> On May 24, 2010, at 4:50 AM, Stefan Behnel wrote: >> >> >> >>> Hi, >>> >>> the current closures branch has limited support for inlined generator >>> expressions, i.e. you can write >>> >>> any(x == 5 for x in some_seq) >>> >>> and Cython will generate an inlined loop for it that short circuits >>> properly on the first hit. To get this working correctly, I fixed the >>> scoping behaviour of the loop variable by giving generator expressions >>> their own scope, so that x won't leak into the surrounding scope in >>> the >>> above example. However, this introduces a pretty annoying problem: you >>> can't type the loop variable any more. Any cdef declaration will >>> only apply >>> to the surrounding scope, not to the scope of the generator >>> expression. >>> >>> This may be acceptable in some cases where Cython can properly infer >>> a type >>> for it, but in other cases, explicit typing is required to make the >>> expression work correctly and/or efficiently. >>> >>> Does anyone have an idea how we can let users provide an explicit >>> type for >>> x in the above example? Maybe with a cast like this? >>> >>> any(x == 5 for <int>x in some_seq) >>> >>> Any other ideas? >>> >>> >> That seems reasonable to me, and also goes well with, e.g., the >> proposed syntax for typing varargs. >> >> > How about some kind of builtin type for a typed iterator, e.g. > > any(x == 5 for x in <iterable[int]>some_seq) # or cython.iterable > > This has two advantages: > > a) Using a call instead of a cast, it would work in pure Python mode > b) It is probably rather useful in a lot of other situations: > > def f(iterable[int] x): ... > cdef iterable[int] y = ... > > def f(x: iterable[int]): ... > > Or, perhaps there is some Python 3 Abstract Base Class stuff we could > use for this concept? > > BTW, thanks a lot for an awesome feature!
Dag Sverre _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
