Unveränderliche und veränderliche Objekte

Die Veränderbarkeit von Objekten stellt ein wichtiges Konzept von Python dar. erst, wenn man es verstanden hat, ergeben vermeintlich seltsame Verhaltensweisen von Python einen Sinn.

Sogenannte unveränderliche Objekte, zum Beispiel Zahlen oder Zeichenketten, kann man – wie der Begriff schon sagt – nicht verändern. Mitunter gibt es das Missverständnis, dass sich in den Zuweisungen

a = 1
a = 2

der Wert von a ändern würde, es sich bei Zahlen also nicht um unveränderbare Objekte handelte. Das Konzept der Veränderbarkeit bezieht sich aber nicht auf Namensverknüpfungen, sondern auf das jeweilige Objekt selbst: So ist nach der zweiten Zuweisung immer noch das Objekt 1 das Objekt 1; aus der Ganzzahl Eins ist ja nicht die Ganzzahl Zwei entstanden.

Anders sieht es bei veränderbaren Objekten aus. Dazu gehören in Python Listen, Dictionaries, Sets sowie im Allgemeinen Klassen und Instanzen. In Listing 5 änderte die Methode append() der Liste diese selbst; das Listenobjekt erhielt ein zusätzliches Element. Alle Zugriffe auf dieses Objekt, egal über welchen Namen, "sehen" die Veränderung.

"Wahrheit" und "Falschheit"

Für die eingebauten Datentypen von Python gilt: Als "falsch" gelten nummerische Null-Werte (0, 0.0, 0.0+0.0j), leere Strings ("", u""), leere Container ([], (), {}, set(), frozenset()) sowie None und False. Alle anderen eingebauten Objekte sind "wahr".

Folglich lassen sich viele if-, elif- und while-Bedingungen wie in der Tabelle "Idiomatische Bedingungen" aufgeführt auch einfacher schreiben. Eine Anwendung zeigt das Listing 8.

Idiomatische Bedingungen

Langform Idiomatische Kurzform
if wert == True if wert
if liste != [] if liste
if liste == [] if not liste
if len(liste) == 0 if not liste
if string == u"" if not string
… und so weiter

Listing 8

def zeige_namen(namen):
    """Gib die Namen in der Liste `namen` aus."""
    if namen:
        print "\n".join(namen)
    else:
        print "keine Namen vorhanden"

Abgesehen davon, dass sie sich kompakter schreiben und leichter lesen lässt, hat die kurze Form noch einige weitere Vorteile:

  • Sie führt zu einem höheren Abstraktionsniveau. Man fragt also zum Beispiel nicht, "Ist die Liste namen ungleich der leeren Liste?", sondern "Gibt es Namen?"
  • Die Kurzform macht Code-Änderungen unnötig, wenn sich der Container-Typ ändert. Die Funktion zeige_namen in Listing 8 kann unverändert bleiben, wenn sie der Funktion statt einer Namensliste ein Tupel oder ein Set übergeben.
  • Deshalb gilt die Funktion nicht nur für Listen, sondern auch für andere Sequenzen. Ein Umstellen der Schnittstelle ist also nicht nötig, sondern die Funktion kann mehrere Schnittstellen gleichzeitig anbieten.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Kommentare

Infos zur Publikation

LU 11/2017: Server für Daheim

Digitale Ausgabe: Preis € 8,50
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 3 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...
Backup mit KUP unter Suse 42.3
Horst Schwarz, 24.09.2017 13:16, 3 Antworten
Ich möchte auch wieder unter Suse 42.3 mit Kup meine Backup durchführen. Eine Installationsmöglic...
kein foto, etc. upload möglich, wo liegt mein fehler?
kerstin brums, 17.09.2017 22:08, 5 Antworten
moin, zum erstellen einer einfachen wordpress website kann ich keine fotos uploaden. vom rechne...
Arch Linux Netzwerkkonfigurationen
Franziska Schley, 15.09.2017 18:04, 0 Antworten
Moin liebe Linux community, ich habe momentan Probleme mit der Einstellung des Lan/Wlan in Arc...