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 01/2018: FLINKE BROWSER

Digitale Ausgabe: Preis € 5,95
(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

Linux Mint als Zweitsystem
Wolfgang Robert Luhn, 13.01.2018 19:28, 3 Antworten
Wer kann mir helfen??? Habe einen neuen Laptop mit vorinstaliertem Windows 10 gekauft. Möchte g...
externe soundkarte Kaufempfehlung
lara grafstr , 13.01.2018 10:20, 3 Antworten
Hallo Ich bin auf Suche nach einer externen soundkarte.. Max 150 Euro Die Wiedergabe is...
Prozessor-Sicherheitslücke Meltdown und Spectre
Wimpy *, 06.01.2018 10:45, 2 Antworten
Ich habe heute ein Sicherheitsupdate "ucode-intel" für openSuse 42.3 erhalten. Ist damit das Prob...
LENOVO ideapad320 Touchpad Linux Mint 18
Peter Deppen, 23.12.2017 16:49, 3 Antworten
Hallo, bin Linux Anfänger und habe das Problem, dass das Touchpad auf dem LENOVO ideapad320 mit L...
PClinuxOS
Günter Beckmann, 20.12.2017 09:51, 1 Antworten
Hi, LUC, hat jemand von Euch Erfahrung mit dem in Heft 12/2017 vorgestelletn PClinuxOS? Ich...