Rheinwerk Computing < openbook >

 
Inhaltsverzeichnis
1 Einleitung
2 Die Programmiersprache Python
Teil I Einstieg in Python
3 Erste Schritte im interaktiven Modus
4 Der Weg zum ersten Programm
5 Kontrollstrukturen
6 Dateien
7 Das Laufzeitmodell
8 Funktionen, Methoden und Attribute
9 Informationsquellen zu Python
Teil II Datentypen
10 Das Nichts – NoneType
11 Operatoren
12 Numerische Datentypen
13 Sequenzielle Datentypen
14 Zuordnungen
15 Mengen
16 Collections
17 Datum und Zeit
18 Aufzählungstypen – Enum
Teil III Fortgeschrittene Programmiertechniken
19 Funktionen
20 Modularisierung
21 Objektorientierung
22 Ausnahmebehandlung
23 Iteratoren
24 Kontextobjekte
25 Manipulation von Funktionen und Methoden
Teil IV Die Standardbibliothek
26 Mathematik
27 Kryptografie
28 Reguläre Ausdrücke
29 Schnittstelle zu Betriebssystem und Laufzeitumgebung
30 Kommandozeilenparameter
31 Dateisystem
32 Parallele Programmierung
33 Datenspeicherung
34 Netzwerkkommunikation
35 Debugging und Qualitätssicherung
36 Dokumentation
Teil V Weiterführende Themen
37 Anbindung an andere Programmiersprachen
38 Distribution von Python-Projekten
39 Grafische Benutzeroberflächen
40 Python als serverseitige Programmiersprache im WWW – ein Einstieg in Django
41 Wissenschaftliches Rechnen
42 Insiderwissen
43 Von Python 2 nach Python 3
A Anhang
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 464 KB

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Python 3 von Johannes Ernesti, Peter Kaiser
Das umfassende Handbuch
Buch: Python 3

Python 3
Pfeil 13 Sequenzielle Datentypen
Pfeil 13.1 Operationen auf Instanzen sequenzieller Datentypen
Pfeil 13.1.1 Ist ein Element vorhanden? – die Operatoren in und not in
Pfeil 13.1.2 Verkettung von Sequenzen – die Operatoren + und +=
Pfeil 13.1.3 Wiederholung von Sequenzen – die Operatoren * und *=
Pfeil 13.1.4 Zugriff auf bestimmte Elemente einer Sequenz – der []-Operator
Pfeil 13.1.5 Länge einer Sequenz – die Built-in Function len
Pfeil 13.1.6 Das kleinste und das größte Element einer Sequenz – min und max
Pfeil 13.1.7 Die Position eines Elements in der Sequenz – s.index(x, [i, j])
Pfeil 13.1.8 Anzahl der Vorkommen eines Elements der Sequenz – s.count(x)
Pfeil 13.2 Listen – list
Pfeil 13.2.1 Verändern eines Wertes innerhalb der Liste – Zuweisung mit []
Pfeil 13.2.2 Ersetzen von Teillisten und Einfügen neuer Elemente – Zuweisung mit []
Pfeil 13.2.3 Elemente und Teillisten löschen – del zusammen mit []
Pfeil 13.2.4 Methoden von list-Instanzen
Pfeil 13.2.5 Weitere Eigenschaften von Listen
Pfeil 13.3 Unveränderliche Listen – tuple
Pfeil 13.3.1 Tuple Packing/Unpacking und Sequence Unpacking
Pfeil 13.3.2 Immutabel heißt nicht zwingend unveränderlich!
Pfeil 13.4 Strings – str, bytes, bytearray
Pfeil 13.4.1 Steuerzeichen
Pfeil 13.4.2 String-Methoden
Pfeil 13.4.3 Formatierung von Strings
Pfeil 13.4.4 Zeichensätze und Sonderzeichen
 
Zum Seitenanfang

13.3    Unveränderliche Listen – tuple Zur vorigen ÜberschriftZur nächsten Überschrift

Der Datentyp list ist sehr flexibel und wird häufig verwendet. Seine Mächtigkeit und Flexibilität haben aber auch den Nachteil, dass die Verwaltung einer Liste intern relativ ressourcenaufwendig ist. Oft wird gar nicht die Flexibilität einer Liste benötigt, sondern nur ihre Fähigkeit, Referenzen auf beliebige Instanzen zu speichern. Deshalb existiert in Python neben list der Datentyp tuple, der im Gegensatz zu list immutabel ist.

Der Datentyp tuple bringt keinen Mehrwert in Bezug auf Funktionalität, denn Listen können alles, was tuple leistet. Tatsächlich steht für tuple-Instanzen nur der Grundstock an Operationen für sequenzielle Datentypen bereit, wie er in Abschnitt 13.1 beschrieben wird.

Zum Erzeugen neuer tuple-Instanzen dienen die runden Klammern, die – wie bei den Listen –, durch Kommata getrennt, die Elemente des Tupels enthalten:

>>> a = (1, 2, 3, 4, 5)
>>> a[3]
4

Ein leeres Tupel wird durch zwei runde Klammern () ohne Inhalt definiert. Eine Besonderheit ergibt sich für Tupel mit nur einem Element. Versucht man, ein Tupel mit nur einem Element auf die oben beschriebene Weise zu erzeugen, ist der entstehende Programmtext unter Umständen nicht eindeutig:

>>> kein_tuple = (2)
>>> type(kein_tuple)
<class 'int'>

Mit (2) wird keine neue tuple-Instanz erzeugt, weil die Klammer in diesem Kontext schon für die Verwendung in Rechenoperationen für Ganzzahlen verwendet wird. Das Problem wird umgangen, indem in Literalen für Tupel mit nur einem Element diesem Element ein Komma nachgestellt werden muss:

>>> ein_tuple = (2,)
>>> type(ein_tuple)
<class 'tuple'>
 
Zum Seitenanfang

13.3.1    Tuple Packing/Unpacking und Sequence Unpacking Zur vorigen ÜberschriftZur nächsten Überschrift

Es ist möglich, die umschließenden Klammern bei einer tuple-Definition entfallen zu lassen. Trotzdem werden die durch Kommata getrennten Referenzen zu einem tuple zusammengefasst, was man Tuple Packing nennt:

>>> datum = 26, 7, 1987
>>> datum
(26, 7, 1987)

Umgekehrt ist es möglich, die Werte eines Tupels wieder zu entpacken:

>>> datum = 26, 7, 1987
>>> (tag, monat, jahr) = datum
>>> tag
26
>>> monat
7
>>> jahr
1987

Dieses Verfahren heißt Tuple Unpacking, und auch hier können die umschließenden Klammern entfallen. Durch Kombination von Tuple Packing und Tuple Unpacking ist es sehr elegant möglich, die Werte zweier Variablen ohne Hilfsvariable zu tauschen oder mehrere Zuweisungen in einer Zeile zusammenzufassen:

>>> a, b = 10, 20
>>> a, b = b, a
>>> a
20
>>> b
10

Richtig angewandt, kann die Nutzung dieses Features zur Lesbarkeit von Programmen beitragen, da das technische Detail der Zwischenspeicherung von Daten hinter die eigentliche Absicht, die Werte zu tauschen, zurücktritt.

Mithilfe von Tuple Unpacking können auch Werte am Anfang und am Ende einer Sequenz ausgelesen werden. Betrachten wir das folgende Beispiel:

>>> zahlen = [11, 18, 12, 15, 10]
>>> elf, *andere, zehn = zahlen
>>> elf
11
>>> zehn
10
>>> andere
[18, 12, 15]

Wird beim Tuple Unpacking einer Referenz ein Stern * vorangestellt, werden in dieser alle übrigen Werte der Sequenz gespeichert. Im Beispiel oben werden der erste Wert von zahlen in elf und der letzte Wert in zehn abgelegt. Die Zahlen dazwischen werden in andere gesammelt.

Vor und nach dem Eintrag mit Stern kann eine beliebige Anzahl anderer Referenzen stehen. Insbesondere kann der erste oder letzte Eintrag einen Stern haben:

>>> zahlen = [11, 17, 17, 19, 10]
>>> *irgendwas, neunzehn, zehn = zahlen
>>> neunzehn
19
>>> zehn
10
>>> elf, *blablabla = zahlen
>>> elf
11
>>> blablabla
[17, 17, 19, 10]

Es kann in einer Zuweisung mit Tuple Unpacking immer nur genau eine Referenz mit einem Stern geben. Dies ist auch sinnvoll, da ansonsten Mehrdeutigkeiten entstehen können.

[»]  Hinweis

Generell ist Vorsicht geboten, wenn Unpacking für ungeordnete Datentypen verwendet wird. Im folgenden Beispiel hängt die Reihenfolge der Elemente 1, 2, 3 davon ab, in welcher Reihenfolge über die Menge {3,1,2} iteriert wird:

>>> a, b, c = {3, 1, 2}
>>> a, b, c
(1, 2, 3)

Da diese Reihenfolge ein Implementierungsdetail ist, kann sie sich zwischen verschiedenen Python-Versionen unterscheiden. Näheres zu Mengen erfahren Sie in Kapitel 15.

 
Zum Seitenanfang

13.3.2    Immutabel heißt nicht zwingend unveränderlich! Zur vorigen ÜberschriftZur nächsten Überschrift

Auch wenn tuple-Instanzen immutabel sind, können sich die Werte der enthaltenen Elemente der Erzeugung ändern. Bei der Erzeugung eines neuen Tupels werden die Referenzen festgelegt, die es speichern soll. Verweist eine solche Referenz auf eine Instanz eines mutablen Datentyps, etwa eine Liste, kann sich dessen Wert trotzdem ändern:

>>> a = ([],)
>>> a[0].append("Und sie dreht sich doch!")
>>> a
(['Und sie dreht sich doch!'],)

Die Unveränderlichkeit eines Tupels bezieht sich also nur auf die enthaltenen Referenzen und ausdrücklich nicht auf die dahinterstehenden Instanzen.

Dass Tupel immutabel sind, ist also keine Garantie dafür, dass sich Elemente nach der Erzeugung des Tupels nicht mehr verändern.

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Python 3 Python 3
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Einstieg in Python
Einstieg in Python


Zum Rheinwerk-Shop: Python. Der Grundkurs
Python. Der Grundkurs


Zum Rheinwerk-Shop: Algorithmen mit Python
Algorithmen mit Python


Zum Rheinwerk-Shop: Objektorientierte Programmierung
Objektorientierte Programmierung


Zum Rheinwerk-Shop: Raspberry Pi. Das umfassende Handbuch
Raspberry Pi. Das umfassende Handbuch


Zum Rheinwerk-Shop: Roboter-Autos mit dem Raspberry Pi
Roboter-Autos mit dem Raspberry Pi


Zum Rheinwerk-Shop: Neuronale Netze programmieren mit Python
Neuronale Netze programmieren mit Python


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2020
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern