Routineaufgaben mit Python automatisieren. Al Sweigart
Чтение книги онлайн.

Читать онлайн книгу Routineaufgaben mit Python automatisieren - Al Sweigart страница 54

Название: Routineaufgaben mit Python automatisieren

Автор: Al Sweigart

Издательство: Bookwire

Жанр: Математика

Серия:

isbn: 9783960889571

isbn:

СКАЧАТЬ

       Veränderbare und unveränderbare Datentypen

      Listen und Strings unterscheiden sich jedoch in einem sehr wichtigen Punkt: Eine Liste ist ein veränderbarer Datentyp, da Sie Elemente zu ihr hinzufügen, aus ihr entfernen und ändern können. Dagegen ist ein String unveränderbar – er lässt sich nicht ändern. Wenn Sie versuchen, ein einzelnes Zeichen in einem String neu zuzuweisen, erhalten Sie die Fehlermeldung TypeError, wie das folgende Beispiel zeigt:

      >>> name = 'Zophie a cat'

      >>> name[7] = 'the'

      Traceback (most recent call last):

      File "<pyshell#50>", line 1, in <module>

      name[7] = 'the'

      TypeError: 'str' object does not support item assignment

      Um einen String zu »ändern«, müssen Sie ihn zerschneiden und verketten, um einen neuen String aus Teilen des alten zu erstellen. Probieren Sie das wie folgt in der interaktiven Shell aus:

      >>> name = 'Zophie a cat'

      >>> newName = name[0:7] + 'the' + name[8:12]

      >>> name

      'Zophie a cat'

      >>> newName

      'Zophie the cat'

      Mit [0:7] und [8:12] haben wir die Zeichen angegeben, die nicht ersetzt werden sollen. Da Strings unveränderbar sind, wird der ursprüngliche String 'Zophie a cat' nicht geändert.

      Eine Liste ist zwar veränderbar, dennoch nimmt die zweite Zeile im folgenden Code keine Änderung an der Liste eggs vor:

      >>> eggs = [1, 2, 3]

      >>> eggs = [4, 5, 6]

      >>> eggs

      [4, 5, 6]

      In Wirklichkeit wird die Liste in eggs hier nicht geändert. Stattdessen wird die alte Liste [1, 2, 3] komplett mit der neuen Liste [4, 5, 6] überschrieben, wie Abbildung 4–2 deutlich zeigt.

      Wenn Sie die ursprüngliche Liste in eggs tatsächlich so ändern wollen, dass sie schließlich [4, 5, 6] lautet, so müssen Sie wie folgt vorgehen:

      >>> eggs = [1, 2, 3]

      >>> del eggs[2]

      >>> del eggs[1]

      >>> del eggs[0]

      >>> eggs.append(4)

      >>> eggs.append(5)

      >>> eggs.append(6)

      >>> eggs

      [4, 5, 6]

      Abb. 4–2Wenn eggs = [4, 5, 6] ausgeführt wird, dann wird der Inhalt von eggs durch eine neue Liste ersetzt.

      In diesem Beispiel steht in eggs am Ende noch die gleiche Liste wie zu Anfang; sie wurde lediglich geändert, aber nicht überschrieben. In Abb. 4–3 können Sie die sieben Schritte sehen, die in den ersten sieben Zeilen dieses Beispiels ablaufen.

      Abb. 4–3Die Anweisung del und die Methode append() ändern den Listenwert unmittelbar.

      Wenn Sie den Wert eines veränderbaren Datentyps ändern (z. B. wie in dem vorstehenden Beispiel mit der Anweisung del und der Methode append()), werden die Werte unmittelbar ausgetauscht. Der Wert der Variablen wird aber nicht durch einen neuen Listenwert ersetzt.

      Die Unterscheidung zwischen veränderbaren und unveränderbaren Typen mag wie sinnlose Haarspalterei wirken, aber im Abschnitt »Verweise übergeben« weiter hinten in diesem Kapitel lernen Sie die unterschiedlichen Verhaltensweisen kennen, die sich je nachdem ergeben, ob Sie eine Funktion mit veränderbaren oder unveränderbaren Argumenten aufrufen. Bevor wir dorthin kommen, sehen wir uns jedoch noch den Datentyp für Tupel an, der eine unveränderbare Form des Listendatentyps darstellt.

       Der Datentyp für Tupel

      Der Datentyp für Tupel ist fast identisch mit dem für Listen, wobei jedoch zwei wichtige Unterschiede bestehen. Erstens werden Tupel in runden statt in eckigen Klammern angegeben, wie das folgende Beispiel zeigt:

      >>> eggs = ('hello', 42, 0.5)

      >>> eggs[0]

      'hello'

      >>> eggs[1:3]

      (42, 0.5)

      >>> len(eggs)

      3

      Der Hauptunterschied zwischen Listen und Tupeln besteht jedoch darin, dass Tupel ebenso wie Strings unveränderbar sind. Es ist nicht möglich, ihre Werte zu bearbeiten, zu entfernen oder neue Werte anzuhängen. Der folgende Code führt daher zu der Fehlermeldung TypeError:

      >>> eggs = ('hello', 42, 0.5)

      >>> eggs[1] = 99

      Traceback (most recent call last):

      File "<pyshell#5>", line 1, in <module>

      eggs[1] = 99

      TypeError: 'tuple' object does not support item assignment

      Wenn sich in dem Tupel nur ein einziger Wert befindet, können Sie das dadurch kennzeichnen, dass Sie in den Klammern ein Komma hinter diesem Wert angeben. Anderenfalls würde Python davon ausgehen, dass Sie einfach nur einen Wert in Klammern geschrieben haben. Anhand des Kommas kann Python erkennen, dass es sich um einen Tupelwert handelt. (Im Gegensatz zu anderen Programmiersprachen ist es in Python zulässig, ein Komma hinter das letzte Element in einer Liste oder einem Tupel zu setzen.) Um den Unterschied zu erkennen, geben СКАЧАТЬ