i

Exkurs - Parameterübergabe in Python

Zeiger (ver)setzen

Wie bei Zuweisungen werden auch bei Parameterübergaben und bei Rückgaben von Funktionswerten Zeiger gesetzt. Zur Verdeutlichung betrachten wir das folgende Programmbeispiel.

def d(x):
    print("x:", x)
    print("id(x):", id(x))
    y = x + x
    print("y:", y)
    print("id(y):", id(y))
    return y

# Test
a = 2
print("a:", a)
print("id(a):", id(a))
a = d(a)
print("a:", a)
print("id(a):", id(a))

Bei der Ausführung werden folgende Ausgaben auf dem Bildschirm gemacht.

a: 2
id(a): 505300136
x: 2
id(x): 505300136
y: 4
id(y): 505300168
a: 4
id(a): 505300168

Die Diagramme veranschaulichen, wie die beteilgten Variablen ihre Daten verwalten.

a = 2
{a -> 2}
Variablenzustand
d(a)   # Übergabe der Parameter
{a -> 2, {x -> 2}}
Variablenzustand
    y = x + x   # Zuweisung an eine lokale Variable 
{a -> 2, {x -> 2, y -> 4}}
Variablenzustand
a = d(a)   # Rückgabe und Weitergabe des Funktionswerts
{a -> 4}
Variablenzustand

Der Mechanismus, der auf dem Setzen von Zeigern beruht, funktioniert auch, wenn - wie im folgenden Beispiel - gleichnamige Variablen benutzt werden.

def d(a):
    print("a:", a)
    print("id(a):", id(a))
    a = a + a
    print("a:", a)
    print("id(a):", id(a))
    return a

# Test
a = 2
print("a:", a)
print("id(a):", id(a))
a = d(a)
print("a:", a)
print("id(a):", id(a))

Bei der Ausführung werden folgende Ausgaben auf dem Bildschirm gemacht.

a: 2
id(a): 505300136
a: 2
id(a): 505300136
a: 4
id(a): 505300168
a: 4
id(a): 505300168

Die Diagramme veranschaulichen, wie die beteilgten Variablen ihre Daten verwalten.

a = 2
{a -> 2}
Variablenzustand
d(a)   # Übergabe der Parameter
{a -> 2, {a -> 2}}
Variablenzustand
    a = a + a   # Zuweisung an eine lokale Variable 
{a -> 2, {a -> 4}}
Variablenzustand
a = d(a)   # Rückgabe und Weitergabe des Funktionswerts
{a -> 4}
Variablenzustand

Suche

v
6.3.2.13.4
inf-schule.de/imperative-programmierung/python/konzepte/namensraeume/exkurs_parameteruebergabepython
inf-schule.de/6.3.2.13.4
inf-schule.de/@/page/pEioLQzQQlVfSSbW

Rückmeldung geben