Parameter von einer zur nächsten Funktion weiterreichen...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hallo,

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
Wie kommt das, dass ein direkter Aufruf von 'date_factory' funktioniert, ein Aufruf über 'event' im Nichts landet...?

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]
Das Leben könnte so einfach sein... :(

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Wieder ein fehlendes "return". :)
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Wie oft muss ein Mensch denselben Fehler wiederholen, bis er endlich neue machen darf?

Ist das jetzt zum Lachen oder zum Weinen?

*grtlgrmpf*
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Zum lächeln. Mach dir das Leben nicht so schwer, das kann vorkommen. Bei solchen Fehlern ist es oft das Beste erstmal eine kleine Pause bzw. etwas anderes zumachen und danach nochmal mit einem klarerem Hirn darauf zuschauen. :wink:
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten