from-Importe in Python (from-Importe in Python), Lektion, Seite 723902
https://www.purl.org/stefan_ram/pub/attributimporte_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

from-Importanweisungen in Python 

Neben den Modulen »__main__« und »__builtins__« (CPython ) gibt es in Python  noch andere Module.

Die Namen, welche in jenen anderen Modulen definiert sind, können aber nicht ohne weiteres verwendet werden. Sie müssen erst in das aktuelle Modul importiert  werden.

Zum Importieren kann eine from-Importanweisung  verwendet werden, die wir auch kurz als einen from-Import  oder Import  bezeichnen, wenn dadurch keine Mißverständnisse möglich sind.

Wir behandeln hier zunächst den Import von Namen aus Modulen, die als Teil der Standardbibliothek  zu Python  gehören.

Beispiel

Das Modul ›string‹ enthält einen Namen »digits«.

Diesen Namen können wir bei Bedarf mit »from« in unser Modul »__main__« importieren und dann als Namen auswerten.

Protokoll (übersetzt und überarbeitet)
digits
Namensfehler: Der Name 'digits' ist nicht definiert.

from string import digits

digits

'0123456789'

(Die obige Fehlermeldung erscheint unter Umständen erst nach einem Neustart der Python -Implementation [also der Konsole].)

Das Modul ›string‹ sollte nicht mit der Klasse ›str‹ verwechselt werden.

Die Klasse ›str‹ ist der Typ von Zeichenfolgen.

Das Modul ›string‹ enthält Namen, welche die Programmierung (insbesondere in Zusammenhang mit Zeichenfolgen) erleichtern sollen.

Syntax

Die from-Importanweisung beginnt mit dem Wort »from«, diesem folgt ein Name, das Wort »import« und ein weiterer Name.

Syntaxdiagramm

from-Importanweisung

.----. .------. .------. .------.
--->( from )--->| Name |--->( import )--->| Name |--->
'----' '------' '------' '------'

Anweisung

.----------------------.
---.--->| Auswertungsanweisung |---.--->
| '----------------------' |
| .----------------------. |
'--->| from-Importanweisung |---'
'----------------------'

Bisher behandelte Schlüsselwörter: »True«, »False«, »None«, »is«, »in«, »from«, »import«.

Die from-Importanweisung ist die erste „richtige“ Anweisung, die wir kennenlernen. Das heißt, die erste Anweisung, die kein  Ausdruck ist. Wie es typisch für alle Anweisungen ist, hat sie keinen  Wert.

Trennung lexikalischer Einheiten

Wenn zwei lexikalische Einheiten andernfalls einen einziges Wort bilden würden, müssen sie durch (mindestens) ein Leerzeichen getrennt werden. Daher darf »import string« nicht als »importstring« geschrieben werden (außer man möchte wirklich das Wort »importstring« schreiben, was aber in dieser Lektion keinen Sinn hätte).

Semantik

Mit der Ausführung einer from-Importanweisung wird der Name hinter »import« aus dem Modul, welches durch das Wort hinter »from« angegeben ist, in das Modul, welches jene from-Importanweisung enthält, importiert. Nach solch einem Import kann der importierte Name (vom Ende der Anweisung) als Ausdruck verwendet werden.

Syntaxdiagramm

from-Importanweisung

.----. .------. .------. .------.
--->( from )--->| Name |--->( import )--->| Name |--->
'----' '------' '------' '------'
Modul Name

Die Ausführung einer from-Importanweisung bezeichnen wird auch kurz als einen from-Import  oder Import, wenn dadurch keine Mißverständnisse möglich sind.

Die Bindungstabelle

Jedes Modul hat eine Bindungstabelle. Die Bindungstabelle enthält Attribute  (Zeilen). Jedes Attribut besteht aus einem Namen und einem Objekt. Das Objekt gibt den Wert des Namens in dem Modul an. Zu jedem Namen kann es in einer Bindungstabelle höchstens ein Attribut geben,

Beim Import eines Namens aus einem Modul wird das Attribut mit dem Namen aus der Bindungstabelle des importierten Moduls in die Bindungstabelle des importierenden Moduls kopiert. Falls es zuvor schon ein Attribut mit dem importierten Namen im importierenden Modul gab, so wird das bisherige Attribut durch das kopierte Attribut ersetzt.

Das Kopieren eines Attributs bei »from string import digits« im Modul »__main__«

string __main__

Bindungstabelle Bindungstabelle

| | | | | |
|-----------------|-----------------| |-----------------|-----------------|
| digits | '0123456789' | ----> | digits | '0123456789' |
|-----------------|-----------------| |-----------------|-----------------|
| | | | | |

Durch das Kopieren des Attributs wird das Objekt »'0123456789'« jedoch nicht  kopiert. In die zweite Spalte der Bindungstabelle von »__main__« wird nur ein Verweis  auf das schon existierende Objekt »'0123456789'« geschrieben. Das bedeutet, daß das Attribut einer neuen Bindung selbst bei einem Objekt, das einen sehr langen Text enthält, nicht besonders viel Speicherplatz verbraucht.

Die Änderung

Auch bei der Ausführung der from-Importanweisung beobachten wir wieder eine Änderung : Nach  der Ausführung jener Anweisung kann ein Name, der zuvor  möglicherweise nicht  ausgewertet werden konnte, unter Umständen ausgewertet  werden.

Der Name »_«

Der Name »_« wird nur durch Auswertungsanweisungen umgebunden, deren Ergebnis nicht ›None‹ ist, nicht  durch Importanweisungen.

Konsolenprotokoll
2 + 3
5
_
5

from string import digits

_

5

Standardnamen

Wir nennen Namen, die von der Standardbibliothek definiert werden, Standardnamen, auch  wenn sie erst nach der Verwendung eines from-Imports verwendet werden können.

Batterien inklusive

Python  kommt „mit Batterien“. Das heißt, daß für viele Anwendungszwecke schon Module in der Standardbibliothek enthalten sind.

Ein Programmierer könnte sich zwar Module auch nach Bedarf beschaffen, jedoch entlastet ihn das Vorhandenseins eines Moduls in der Standardbibliothek von der aufwendigen Auswahl eines Moduls und Analyse der Lizenz des Moduls.

Andererseits belastet eine große Standardbibliothek die Betreuer der Standardbibliothek, die jetzt überarbeitet sind und sich daher eher eine Verkleinerung der Standardbibliothek wünschen. Außerdem können sich Module, sobald sie einmal in die Standardbibliothek aufgenommen wurden, nicht mehr so frei und schnell verändern, wie außerhalb der Standardbibliothek, so daß ihre Weiterentwicklung gebremst wird.

Der Autor dieses Kurses behandelt in seinen Programmierkurses vorwiegend die Standardbibliothek, so daß eine große Standardbibliothek für diesen Kurs bedeutet, daß viele interessante Anwendungsmöglichkeiten vorgestellt werden können.

Einige sehr bekannte Erweiterungsbibliotheken, die in der Standardbibliothek fehlen sind: NumPy, matplotlib, Pandas  und PyGame.

Unter »https://pypi.org/« findet man eine große Vielzahl von Erweiterungspaketen. Durch eine Installation mit dem zu CPython  gehörenden Programm ›pip‹ kann eine CPython  relativ einfach um Erweiterungspakete erweitert werden.

Mehrere Namen aus demselben Modul importieren

Diese Schreibweise zum Import mehrerer Namen aus einem Modul gilt 2020 für PEP8 nicht  als schlechter Stil.

Protokoll

from string import digits, punctuation

digits

'0123456789'
punctuation

'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

Namen beim Import umbenennen

Protokoll

from string import digits as d, punctuation as p

d

'0123456789'
p
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
digits
NameError: name 'digits' is not defined
punctuation
NameError: name 'punctuation' is not defined

Python 2 *

Vor vielen Jahren gab es eine Version von Python, die als „Python 2 “ bezeichnet wird. Python 2  hat große Ähnlichkeit mit modernem Python  (Python 3 ), so daß man viele Python-2 -Programme (nach eventuell nötigen kleineren Änderungen) leicht mit einer Python-3 -Implementation verwenden kann.

Einige Modulnamen lauteten in Python 2  noch anders. Vollständige Listen findet man im Web. Hier seien nur einige Beispiele aufgezählt.

Alte und neue Modulnamen (Beispiele)

Python 2 Python 3

Tkinter tkinter

ConfigParser configparser

cPickle pickle

cStringIO, StringIO io

Man sieht, daß für Modulnamen heute vollständige Kleinschreibung  bevorzugt wird und auf Voranstellung eines »c« verzichtet wird.

Übungsaufgaben

/   Übungsaufgabe

Ermitteln Sie den Wert des Namens »hexdigits« des Moduls »string« nach dem Import jenes Namens.

/   Reserveaufgabe ⃗

Ermitteln Sie den Wert des Namens »version« des Moduls »sys« nach dem Import jenes Namens.

/   Reserveaufgabe ⃗

Ermitteln Sie den Wert des Namens »ascii_letters« des Moduls »string« nach dem Import jenes Namens.

/   Reserveaufgabe ⃗

Ermitteln Sie den Wert des Namens »punctuation« des Moduls »string« nach dem Import jenes Namens.

Aussprachehinweise
punctuation ˌpʌŋkʧuˈeɪʃən

/   Übungsaufgabe

Ermitteln Sie den Wert des Doppelten  des Wertes des Namens »pi« aus dem Modul »math« nach dem Import jenes Namens.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723902 stefan_ram:723902 from-Importe in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723902, slrprddef723902, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/attributimporte_python