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

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

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

Автор: Al Sweigart

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

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

Серия:

isbn: 9783960889571

isbn:

СКАЧАТЬ ein:

      >>> type(('hello',))

      <class 'tuple'>

      >>> type(('hello'))

      <class 'str'>

      Mithilfe von Tupeln machen Sie für die Leser des Codes deutlich, dass diese Folge von Werten nicht geändert werden soll. Wenn Sie also eine geordnete Folge von Werten brauchen, die sich nie ändern, dann verwenden Sie dafür ein Tupel. Der zweite Vorteil von Tupeln gegenüber Listen besteht darin, dass Python aufgrund ihrer Unveränderbarkeit einige Optimierungen vornehmen kann, sodass der Code ein wenig schneller ausgeführt wird als bei der Verwendung von Listen.

       Typen mit den Funktionen list() und tuple() umwandeln

      So wie str(42) die Stringdarstellung '42' des Integerwertes 42 zurückgibt, so geben die Funktionen list() und tuple() die Listen- bzw. Tupelversionen der übergebenen Werte zurück. In den folgenden Beispielen weisen die Rückgabewerte einen anderen Datentyp auf als die übergebenen Werte:

      >>> tuple(['cat', 'dog', 5])

      ('cat', 'dog', 5)

      >>> list(('cat', 'dog', 5))

      ['cat', 'dog', 5]

      >>> list('hello')

      ['h', 'e', 'l', 'l', 'o']

      Die Umwandlung eines Tupels in eine Liste ist praktisch, wenn Sie eine veränderbare Version eines Tupelwertes benötigen.

       Verweise

      Wie Sie bereits wissen, lassen sich Strings und Integerwerte in Variablen »speichern«. Diese Beschreibung stellt jedoch eine Vereinfachung der wahren Vorgänge dar. In Wirklichkeit werden in den Variablen Verweise auf die Speicherorte festgehalten, an denen sich die Werte befinden. Geben Sie Folgendes in die interaktive Shell ein:

      >>> spam = 42

      >>> cheese = spam

      >>> spam = 100

      >>> spam

      100

      >>> cheese

      42

      Wenn Sie der Variablen spam den Wert 42 zuweisen, erstellen Sie in Wirklichkeit den Wert 42 im Arbeitsspeicher des Computers und speichern lediglich einen Verweis (oder eine Referenz) auf diesen Speicherort in der Variablen. Beim Zuweisen des Wertes in spam zu der Variablen cheese kopieren Sie diesen Verweis. Die Variablen spam und cheese verweisen jetzt beide auf den Wert 42 im Arbeitsspeicher. Wenn Sie den Wert in spam später auf 100 ändern, legen Sie einen neuen Wert 100 an und speichern einen Verweis darauf in spam. Das hat aber keinen Einfluss auf den Wert in cheese. Integer sind unveränderbare Werte. Wenn Sie die Variable spam ändern, lassen Sie sie in Wirklichkeit auf einen ganz anderen Wert im Arbeitsspeicher verweisen.

      Listen funktionieren nicht auf diese Weise, da sie veränderbar sind. Der folgende Code macht diesen Unterschied deutlich:

      >>> spam = [0, 1, 2, 3, 4, 5] image

      >>> cheese = spam # Kopiert den Verweis, nicht die Liste image

      >>> cheese[1] = 'Hello!' # Ändert den Listenwert image

      >>> spam

      [0, 'Hello!', 2, 3, 4, 5]

      >>> cheese # Die Variable cheese verweist auf dieselbe Liste

      [0, 'Hello!', 2, 3, 4, 5]

      Das mag Ihnen merkwürdig vorkommen. Schließlich hat der Code nur die Liste cheese bearbeitet. Aber es scheint, dass beide Listen verändert worden sind!

      Wenn Sie die Liste erstellen (image), weisen Sie der Variablen spam einen Verweis darauf zu. In der nächsten Zeile aber (image) wird nicht der Listenwert selbst in cheese kopiert, sondern nur der Listenverweis, der sich in spam befindet. Das bedeutet, dass die in spam und cheese gespeicherten Werte nun beide auf dieselbe Liste verweisen. Es gibt nur eine einzige zugrunde liegende Liste, da die Liste selbst gar nicht kopiert wurde. Wenn Sie daher das zweite Element von cheese ändern (image), bearbeiten Sie in Wirklichkeit dieselbe Liste, auf die auch spam verweist.

      Gewöhnlich wird gesagt, dass Sie sich Variablen als Kisten vorstellen können, die Werte enthalten. Das ist hier jedoch nicht ganz korrekt, denn in Wirklichkeit enthalten die Variablen gar nicht die Listen selbst, sondern nur Verweise darauf. (Diese Verweise tragen ID-Nummern, die Python intern verwendet, aber darum brauchen wir uns nicht zu kümmern.) Abb. 4–4 zeigt, was geschieht, wenn eine Liste der Variablen spam zugewiesen wird.

      Abb. 4–4Mit spam = [0, 1, 2, 3, 4, 5] wird ein Verweis auf die Liste gespeichert, aber nicht die Liste selbst.

      In Abb. 4–5 sehen Sie, wie der Verweis in spam zu cheese kopiert wird. Das bedeutet aber nur, dass ein neuer Verweis erstellt und in cheese gespeichert wird, aber keine neue Liste. Beide verweisen auf dieselbe Liste.

      Abb. 4–5Mit spam = cheese wird der Verweis kopiert, aber nicht die Liste.

      Wenn Sie die Liste ändern, auf die cheese verweist, ändern Sie damit auch die Liste, auf die spam verweist, da es sich dabei um ein und dieselbe handelt. Das können Sie in Abb. 4–6 erkennen.

      Abb. 4–6cheese[1] = 'Hello!' ändert die Liste, auf die beide Variablen verweisen.

      Python-Variablen enthalten zwar eigentlich nur СКАЧАТЬ