[Python-de] Parameter in Python

Marek Kubica marek at xivilization.net
Mi Nov 13 19:33:59 CET 2013


On Tue, 12 Nov 2013 14:57:13 +0100
Alexander Langer <alexander.langer at address.invalid> wrote:

> Am 12.11.2013 14:40, schrieb Christian Heimes:
> > Spaß bei Seite, neue Pythonentwickler sind oft verwirrt, weil sie
> > nur CBR und CBV in der Schule/Uni gelernt haben.
> 
> Das gilt auch für erfahrene Pythonentwickler.

Eigentlich nicht. Man muss sich halt bewusst machen das Neuzuweisung
und Änderung eines Objektes zwei unterschiedliche Operationen sind, was
jetzt nicht wirklich Raketenwissenschaft ist. Aber es gibt nen Trick,
nämlich überall wo = steht ist das ne Zuweisung ;)

Das hat mit mutable und immutable erstmal gar nichts zu tun, weil ja
bei sowas immer Äpfel und Birnen verglichen werden. Das
Standardbeispiel wo Leute dann diese angebliche Inkonsistenz von Python
festmachen wollen ist ja dieses:

a = 3
def b(a)
    a = 4
b(a)
print a

Wo sich nix ändert. Dann nimmt man ne Liste und

a = [1, 2, 3]
def b(a)
    a.append(4)
b(a)
print a

An dieser Stelle heißt dann "ohh, a hat sich geändert!". Ja natürlich,
weil man ja das Objekt was an a gebunden ist geändert hat.

Wohingegen eine identische Übersetzung vom Zahlenbeispiel ja das hier
ist:

a = [1, 2, 3]
def b(a)
    a = [4, 5, 6]
b(a)
print a

Da ändert sich natürlich auch nix, wozu auch? a ist an das gleiche
Objekt gebunden wie davor auch und der neue lokale Name a in der
Funktion ist ja von außen nicht sichtbar.

grüße,
Marek


Mehr Informationen über die Mailingliste python-de