[Python-de] Funktionale Denksportaufgabe

Rainer Fischbach fischbach at ecs-gmbh.de
Thu Sep 26 14:42:54 EDT 2002


At 12:15 26.09.2002 +0200, you wrote:
>René Liebscher:
>
>> Ich frage mich gerade, ob man nicht auch noch die Abfrage func==None
>> irgendwie
>> in das if reinbekommt (mit and oder or)???
>
>Just das habe ich mich auch gefragt! ;-) Erst dachte ich an:
>
>   def filter1(func, seq):
>       (func == None) and eval("return seq")
>       return [x for x in seq if func(x)]
>
>aber eval (und exec) tun's nicht so recht zusammen mit return, jeden-
>falls nicht einfach so! Aber falls es irgendwie ginge, koennte man es
>*wirklich* **rein** funktional in diese Form bringen, wobei ??? eine
>noch unbestimmte Funktion ist:

dass eval es nicht tut, liegt daran, dass eval einen compilierten Ausdruck
bzw. einen String, der einen Ausdruck darstellt, braucht, während return
eben eine Anweisung ist! Hier wirkt sich aus, dass Python eine imperative
Sprache mit Anweisungs/Ausdrucks-Spaltung ist! Leider tut es auch exec
nicht, weil weder exec noch eval ihre Argumente tatsächlich in der
lexikalischen Umgebung auswerten in der sie stehen! Deshalb funktioniert
hier auch nested scope nicht! (richtige lexical closures wären schon was)

Die Konsequenz ist, dass das return im Fall von eval ein Syntaxfehler ist
und im Fall von exec im falschen Kontext (außerhalb einer Funktion) steht! 

Ich halte es für sinnvoll, den funktionalen Stil dort zu verwenden, wo das
glatt geht und Eleganz- und/oder Effizienzgewinne bringt. Von Workarounds,
die von hinten durch  die Brust ins Auge gehen, hat man nicht viel. Aber
vielleicht gibts an Python noch ein paar Dinge glatt zu ziehen

ciao, Rainer


     
    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