Python/C API
Oren Tirosh
oren-py-l at hishome.net
Thu Apr 10 03:23:59 EDT 2003
On Thu, Apr 10, 2003 at 02:34:13AM -0400, Jp Calderone wrote:
> How does one write generators in C, or does one not?
>
You can write something similar to Python generators using Duff's Device.
#define GEN_BEGIN(switch(self->state) { case 0:
#define GEN_END case -1: } return NULL;
#define GEN_YIELD(value) self.state = __LINE__; return (value); case __LINE__:
#define GEN_RETURN(value) self.state = -1; return (value);
PyObject* myobject_next(myobject *self)
{
GEN_BEGIN
while(...) {
...
GEN_YIELD(...)
...
if(...) {
...
GEN_YIELD(...)
...
if(...) {
GEN_RETURN(...)
}
}
...
}
GEN_END
}
Local variables will not be preserved after yielding, so all state data
must be stored in the instance.
Oren
More information about the Python-list
mailing list