Zuweisungen und Lambdas (Zuweisungen und Lambdas), Lektion, Seite 723975
https://www.purl.org/stefan_ram/pub/zuweisungen_lambdas_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

lambda-Ausdrücke und Bindungen in Python 

Durch eine Bindungsanweisung können wir einen Namen an den Wert eines lambda-Ausdrucks binden und später verwenden.

Parameterlose Funktionen

Eine Funktion, die «9» ergibt: ›lambda:9‹.

Protokoll

f = lambda:9

f()

9

Die Bindung eines lambda-Wertes an einen Namen nennen wir auch eine lambda-Bindung.

Ein Name, der an den Wert von »random()« gebunden wird, hat immer dieselbe  Zahl als Wert.

Protokoll

from random import random

x = random()

f

0.423278698273923
f
0.423278698273923

«lambda:random()» ist hingegen eine Funktion, die bei jedem Aufruf eine neue Zufallszahl  ergeben kann.

Protokoll

from random import random

f = lambda:random()

f()

0.92879023921387852
f()
0.47824578120972094

Dies zeigt, daß die Funktion «lambda:random()» praktisch den Ausdruck  »random()« enthält (und nicht nur dessen Wert).

Man kann auch sagen, daß »lambda« die Auswertung des »random()« verzögert, so daß dies nicht schon bei der Ausführung der Anweisung »f = lambda:random()«, sondern erst beim Aufruf der Funktion »f« ausgewertet wird.

Statt »f = lambda:random()« könnte man meist auch kürzer einfach »f = random« schreiben. Oben wurde die längere Schreibweise »f = lambda:random()« nur verwendet, um damit »lambda« vorzuführen.

Eine Funktion, die das Zehnfache einer random-Zufallszahl ergibt:

Protokoll

from random import random

r10 = lambda: 10 * random()

r10()

3.34982759827982
r10()
8.23528952829382

Speichern der EVA-Programme ⃗

Wenn versucht wird, ein Programm, wie »3 * input()«, zu speichern, so speichert man möglicherweise lediglich das Ergebnis  des Programms.

Protokoll
f = 3 * input()
eingabe
f
eingabeeingabeeingabe

Durch »lambda:« wird die sofortige Ausführung des Programms verhindert, so daß dieses dann an einen Namen gebunden werden kann. Erst bei der Auswertung eines Aufrufs des Programms, wird »3 * input()« dann ausgewertet.

Protokoll

f = lambda: 3 * input()

f()

eingabe
eingabeeingabeeingabe
f()
abc
abcabcabc

Bezüge auf Namen aus dem Modul ⃗

In einem lambda-Ausdruck kann ein gewöhnlicher Bezeichner als Ausdruck verwendet werden, auch wenn er bei der Auswertung des lambda-Ausdrucks noch gar keinen Wert hat. Er muß aber bei der Auswertung eines Aufrufs  der lambda-Funktion einen Wert haben.

Protokoll (übersetzt)

f =( lambda: x )

x = 2

f()

2

x = 3

f()

3

del x

f()

Namensfehler: Der Name 'x' ist nicht definiert.

Übungsfragen ⃖

?   Übungsfrage ⃖

Welche Ausgabe ergibt sich nach der folgenden Eingabe?

Konsoleneingabe

f = lambda: 3

f()

Übungsaufgaben ⃖

/   Übungsaufgabe ⃖

Schreiben Sie eine Bindungsanweisung, so daß danach der Aufruf »g()« den int-Wert «7» als Wert hat.

Test (sollte ›True‹ ergeben)
g() == 7

/   Übungsaufgabe

Schreiben Sie eine Bindungsanweisung, so daß danach der Aufruf »h()« die Zeichenfolge »abc« als Wert hat.

 

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 stefanram723975 stefan_ram:723975 Zuweisungen und Lambdas Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723975, slrprddef723975, 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/zuweisungen_lambdas_python