bei folgendem Verhalten fehlt mir der Durchblick:
Code: Alles auswählen
In [31]: def date_factory(years, months, days):
years = years or xrange(1,10000)
months = months or xrange(1,13)
days = days or xrange(1,32)
for y, m, d in ((y, m, d) for y in years for m in months for d in days):
if d < 1:
yield datetime.date(y, m, max_month_day(y, m))
else:
try:
yield datetime.date(y, m, d)
except ValueError:
pass
....:
....:
In [43]: def event(callback, *args, **kwargs):
callback(*args, **kwargs)
....:
....:
In [45]: kw = {'years': [2010, 2011], 'months': [3], 'days': [15]}
In [46]: list(date_factory(**kw))
Out[46]: [datetime.date(2010, 3, 15), datetime.date(2011, 3, 15)]
In [47]: list(event(date_factory, **kw))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
TypeError: 'NoneType' object is not iterable
Wenn ich selbiges mit einer einfachen Funktion, die keinen Generator liefert, mache, gibt es keine Probleme:
Code: Alles auswählen
In [48]: def foo(years, months, days):
....: print years, months, days
....:
....:
In [49]: foo(**kw)
[2010, 2011] [3] [15]
In [50]: event(foo, **kw)
[2010, 2011] [3] [15]
mutetella