Lambda-Ausdrücke in Python (Lambda-Ausdrücke in Python), Lektion, Seite 724032
https://www.purl.org/stefan_ram/pub/lambda-ausdrueck_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

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.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724032 stefan_ram:724032 Lambda-Ausdrücke in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724032, slrprddef724032, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/lambda-ausdrueck_python