lambda-Ausdrücke in Python
- Vorbereitung
from random import random
Normalerweise ergibt die Auswertung eines Ausdrucks den Wert des Ausdrucks, und nicht den Ausdruck selber.
- Auswertung
random()
0.8020249602822879
Ein Ausdruck, der für sich selber stehen soll, kann mit »lambda:« geschrieben werden.
- Auswertung (gekürzt)
lambda: random()
<function <lambda>>
Der erhaltene Wert steht nun für den Ausdruck »random()«. Der Ausdruck »random()« wurde aber nicht ausgewertet, sondern nur im Objekt ›lambda: random()‹ hinterlegt.
Der Ausdruck (»random()«) kann dann durch einen Aufruf dieses Wertes ausgewertet werden.
- Auswertung
_()
0.2235827951893132
- Auswertung
( lambda: random() )()
0.3945749872951999
»lambda:« erlaubt es also, einen Ausdruck in ein Objekt zu verpacken. Auf diese Weise kann der Ausdruck zunächst gespeichert werden. Später kann er bei Bedarf durch einen Aufruf des Objekts ausgewertet werden.
Syntax
Ein lambda-Ausdruck ist ein Ausdruck, der mit dem Wort »lambda« beginnt, auf welches ein Doppelpunkt »:« und ein Ausdruck folgt.
- Neue, erweiterte Syntax (vereinfacht)
lambda-Ausdruck
.------. .-. .----------.
--->( lambda )--->( : )--->| Ausdruck |--->
'------' '-' '----------'Ausdruck
.--------------------.
---.--->| additiver Ausdruck |---.--->
| '--------------------' |
| .--------------------. |
'--->| lambda-Ausdruck |---'
'--------------------'
Die Definition des Ausdrucks hinter dem Doppelpunkt als „Ausdruck“ bedeutet, daß dieser alle möglichen Operatoren enthalten kann, ohne daß er eingeklammert werden muß (»lambda:« verhält sich in dieser Hinsicht wie ein Vorzeichen mit einer Priorität, die kleiner ist als die aller anderen Operatoren). Daher muß der lambda-Ausdruck als ganzer manchmal eingeklammert werden, um zu verhinden, daß etwas, das dem lambda-Ausdruck folgen soll, noch in den Ausdruck hinter dem Doppelpunkt aufgenommen wird. Beispielswese bedeutet »( lambda:2+3 )« nicht »( ( lambda:2 )+ 3 )«, sondern »( lambda:( 2 + 3 ))«.
Semantik
Der Wert eines lambda-Ausdrucks ist eine Funktion. (Eine Funktion ist eine bestimmte Art aufrufbarer Objekte, also selber auch wieder ein Objekt.)
Ein lambda-Funktion der Wert eines lambda-Ausdrucks.
Beim der Auswertung eines Aufruf einer solchen, durch einen lambda-Ausdruck gegebenen, Funktion wird der im lambda-Ausdruck enthaltene Ausdruck ausgewertet. Der Wert jenes Aufrufs ist dann der bei jener Auswertung erhaltene Wert, und die von jenem Aufruf bewirkte Änderung ist die von jener Auswertung bewirkte Änderung.
Motivation
Manchmal wird eine Funktion mit einem ganz bestimmten Ergebnis benötigt (manchmal ist nur die Angabe einer Funktion möglich). Das Wort »lambda« erlaubt es einem dann, genau solch eine Funktion zu schreiben. Im weiteren Verlauf des Kurses folgen noch Beispiele dazu.
Syntaktische Eigenschaften
- Eigenschaften von Operatoren – Operatoren höherer Priorität stehen weiter oben
S P A
() 1 Z
** 2 I R
+, - 1 P
*, / 2 I L
+, - 2 I L
==, is, !=, <, >, <=, >=, in, not in 2 I
not 1 P
and 2 L
or 2 L
lambda: 2 X
Übungsfragen
? Übungsfragen
Welchen Wert hat der Ausdruck »( lambda: 3 )()«?
? Übungsfragen
Ist der Wert des Ausdrucks »( lambda: 3 )« eine Zahl oder eine Funktion?
? Übungsfragen
Ist »lambda« eine Funktion?
? Übungsfragen
Ist der Wert des Ausdrucks »( lambda: 3 )()« eine Zahl oder eine Funktion?
Übungsaufgabe
/ Übungsaufgabe
Schreiben Sie einen lambda-Ausdruck, so daß der Wert seines Aufrufs die Zeichenfolge »abc« wäre, wenn er aufgerufen werden würde.
Reserveaufgaben
/ Reservaufgabe
Schreiben Sie einen lambda-Ausdruck, so daß der Wert seines Aufrufs ›False‹ ist.
/ Reservaufgabe
Schreiben Sie einen lambda-Ausdruck, so daß der Wert seines Aufrufs ›8.2‹ ist.
/ Reservaufgabe
Schreiben Sie einen lambda-Ausdruck, so daß der Wert seines Aufrufs ›None‹ ist.