[Python-de] Datumseingabe testen

Rainer Fischbach fischbach at ecs-gmbh.de
Wed Aug 28 19:15:13 EDT 2002


At 15:36 28.08.2002 +0200, you wrote:
>Rainer Fischbach <fischbach at ecs-gmbh.de> wrote:
>>  [...] Schöner wäre das sicher mit einem in Python leider
>> fehlenden Closure-Konstrukt, das etwas syntactical sugure für das Lambda
>> bietet:
>> 
>> 	valid_date (y, m, d) where d, m, y = map (int, datum.split ('.') 
>
>Meinst Du sowas wie
>
>    valid_date(*[int(s) for s in datum.split(".", 2)])

nein, das closure wertet den Ausdruck einem lokalen Scope aus, in dem die
Variablen d, m, y gebunden sind. Das soll hier ja verdeutlichen, wie sich
die Reihenfolge der Elemente umkehrt.
>
>;-) ? Falls die Reihenfolge verkehrt ist und man die Definition von
>valid_date() nicht ändern will, kann man ab Python 2.3 vsl. auch schreiben
>
>    valid_date(*[int(s) for s in datum.split(".", 2)[::-1]])

das wär ganz nett. Damit hätte man endlich ein funktionales reverse. Sehr
sprechend ist die Notation allerdings nicht.
>
>Letztlich bleibt es eine Geschmacksfrage, ob so ein Einzeiler schöner ist
>als eine Folge von Anweisungen, etwa
>
>    felder = datum.split(".", 2)
>    felder.reverse()
>    try:
>        felder = [int(s) for s in felder]
>    except:
>        "meckern"
>    valid_date(*felder)

diese Art von Code, in dem eine Variable mal eine str und mal eine
int-Liste ist, halte ich für bedenklich. Das ist undurchsichtig und
fehleranfällig. Die Ausnahmebehandlung ist an dieser Stelle sicher nicht
sehr sinnvoll. Bei der ganzen Sache kann ja noch viel mehr schief gehen als
die int-Konversion (der splitmax-Parameter hilft hier nicht wirklich) und
was die richtige Behandlung wäre ist auf dieser Mikroebene nicht
entscheidbar. Was soll an dieser Abfolge von Zuweisungen und
seiteneffektiven Methodenaufrufen klarer und verständlicher sein als an dem
applikativen Einzeiler?
>
>_Schneller_ ist der Einzeiler nicht unbedingt ...

das ist richtig (wobei es sich hier um insignifikante Unterschiede handelt)
und vor allem der Tatsache geschuldet, dass heutige
Python-Implementierungen funktionalen Code (nicht nur in Fällen wie diesem,
sondern auch in solchen, wo es darauf ankäme) nicht so effizient
verarbeiten wie das möglich wäre. Stackless könnte hier Verbesserungen
bringen (wie z. B. Schwanzrekursions-Elimination, etc.)

sl. Rainer
>
>  Detlef
>
>_______________________________________________
>Python-de maillist  -  Python-de at starship.python.net
>http://starship.python.net/mailman/listinfo/python-de
>
>
     
    Rainer Fischbach
______________________________________________________

    ECS
    Engineering Consulting & Solutions GmbH
    Muehlstrasse 3
    D-92318  Neumarkt

    Phone:               +49 (0)9181 - 4764-84
    Fax:                 +49 (0)9181 - 4764-50
    Mobile:              +49 (0)171  - 41 41 570
    e-mail:              fischbach at ecs-gmbh.de
    WWW:                 http://www.ecs-gmbh.de
______________________________________________________






More information about the Python-de mailing list