[python-users] lambda

Daniel Hepper daniel.hepper at gmail.com
Fr Mai 15 15:58:54 CEST 2009


Es ist vielleicht noch erwähnenswert dass das Lambda-Kalkül mit dem
lambda Keyword aus Python nichts zu tun hat.

Das lambda Keyword kann zur Erzeugung anonymer Funktionen verwendet
werden und ist manchmal sehr praktisch. Ich verwende es z.B. in meinen
Djano-Settings.
http://daniel.hepper.net/blog/2008/09/dynamic-paths-for-lazy-people/

Das Lambda-Kalkül ist eine formale Sprache, die wahrscheinlich
hauptsächlich entwickelt wurde um Informatik-Studenten zu quälen.
Nebenbei kann man aber auch noch etwas über die Berechenbarkeit eines
Problems aussagen. http://de.wikipedia.org/wiki/Lambda-Kalk%C3%BCl

Grüße,
Daniel


2009/5/15 Christopher Arndt <chris.arndt at web.de>:
> Dirk Hünniger schrieb:
>> Also letzen ende eine funktionsdefinition mit geringfügig anderer Syntax.
>> Aber ich lasse mich gerne aufklären wenn da wirklich noch mehr drin
>> steckt als das was ich hier
>> gesagt habe.
>
> So sehe ich das auch. Mit der wichtigen Einschränkung, dass der
> Funktionskörper auf *einen Ausdruck* beschränkt ist, dessen Wert als
> Rückgabewert der Funktion verwendet wird. Das heißt, man keine
> Statements, also import, if/else/etc. oder print (Python < 3.0) verwenden.
>
> Seit es list comrehensions, generator expressions, Iteratoren und das
> ternäre Konstrukt (x if y else z) in Python gibt, macht diese
> Einschränkung nur selten Probleme, aber oft leidet die Lesbarkeit sehr
> darunter. Manchmal ist es also besser, einfach eine Hilfsfunktion zu
> definieren, als eine lange, unleserliche lambda-Konstruktion zu verwenden.
>
> Man verwendet lambdas oft, wenn statt eines konkreten Wertes eine
> Funktion, die den Wert erzeugt, als Argument übergeben werden soll, um
> die Definition einer Hilfsfunktion zu vermeiden. Ein einfaches Beispiel:
>
> Sortiere eine Liste von Namen unabhängig von Groß- und Kleinschreibung:
>
> Statt:
>
>    def sortfunc(a, b):
>        return cmp(a.lower(), b.lower())
>
>    l.sort(sortfunc)
>
> Kann man
>
>    l.sort(lambda a,b: cmp(a.lower(), b.lower()))
>
> schreiben.
>
>
> Seit Python 2.4 ist es besser, statt der Sortierfunktion eine Funktion
> zum Umwandeln der Listenitems in die Sortierschlüssel zu verwenden.
>
> Ohne lambda:
>
>    def keyfunc(x):
>        return x.lower()
>
>    l.sort(key=keyfunc)
>
> Mit lambda:
>
>    l.sort(key=lambda x: x.lower())
>
> Sortieren einer Liste von dictionaries der Form {'name': '...',
> 'firstname': '...'} nach dem Wert des Keys 'name':
>
> Ohne lambda:
>
>    def get_name(x):
>        return x['name']
>
>    l.sort(key=get_name)
>
> Mit lambda:
>
>    l.sort(key=lambda x: x['name'])
>
> Oder unter Zuhilfenahme des "operator" Moduls (effizienter, weil in C
> implementiert):
>
>    from operator import attrgetter
>
>    l.sort(key=attrgetter('name'))
>
>
>
> Chris
> ________________________________________
> Diese Mail erhalten Sie ueber die Mailingliste Python-users der Universitaet zu Koeln
> Python-users at uni-koeln.de
> https://lists.uni-koeln.de/mailman/listinfo/python-users
>




Mehr Informationen über die Mailingliste python-users