Vollständige Importanweisungen in Python
Beispiel
Eine vollständige Importanweisung wird wie eine from-Importanweisung geschrieben, enthält am Ende aber ein Sternchen »*« an Stelle eines Namens.
Auf diese Weise werden alle Namen aus dem angegebenen Modul importiert.
- Protokoll (gekürzt und frei übersetzt)
pi
Namensfehler: Der Name 'pi' ist nicht definiert!
tau
Namensfehler: Der Name 'tau' ist nicht definiert!
e
Namensfehler: Der Name 'e' ist nicht definiert!
(Die obige Fehlermeldungen erscheinen unter Umständen erst nach einem Neustart der Python -Implementation [also der Konsole].)
- Protokoll
from math import *
pi
3.141592653589793
tau
6.283185307179586
e
2.718281828459045
Syntax
Wir erweitern die Syntax der from-Importanweisung um den Stern »*«.
- Syntaxdiagramm
from-Importanweisung
.----. .------. .------. .------.
--->( from )--->| Name |--->( import )---.--->| Name |---.--->
'----' '------' '------' | '------' ^
| .-. |
'---->( * )-----'
'-'Anweisung
.----------------------.
---.--->| Auswertungsanweisung |---.--->
| '----------------------' |
| .----------------------. |
'--->| from-Importanweisung |---'
'----------------------'
Semantik
(Die Semantik einer vollständigen Importanweisung wurde schon bei der Behandlung des einführenden Beispiels angegeben.)
Stil
“In general, don’t use from modulename import *. ”
– Python Frequently Asked Questions (Release 3.9.0a3), Abschnitt “2.2.5 What are the “best practices” for using import in a module? ”
Vollständige Importe findet man meist in Ad-hoc-Programmen. In bibliotheksfähigem Code werden sie meist vermieden, weil durch den Import gar nicht benötigter Namen Probleme verursacht werden können:
- Bei mehreren vollständigen Importen können von einem Import importierte Namen durch einen späteren vollständigen Import undefiniert werden, so daß der Programmierer die Kontrolle über die Bedeutung der importierten Namen verliert. (Die Reihenfolge der Importanweisungen kann dann eine Rolle spielen.)
- Bei mehreren vollständigen Importen wird es für den Programmierer eines Programms schwierig zu erkennen, aus welchem Modul ein Name überhaupt importiert wurde.
- Selbst wenn beim Schreiben des Programmes keines der genannten Probleme auftaucht, kann es später auftreten, weil die Module, aus denen alle Namen importiert wurde, inzwischen erweitert worden sein könnten.
- Wenn einmal ein vollständiger Import verwendet wurde, kann es sehr schwierig und zeitaufwendig werden, diesen später durch gezielte Importe einzelner Namen zu ersetzen. Hingegen ist es relativ einfach, von Anfang an auf vollständige Importe zu verzichten.
- Da vollständige Importe als schlechter Stil gelten, könnte ihre Verwendung in Prüfungen zu einer schlechteren Bewertung führen.
Da einige der genannten Probleme erst bei mehreren Importen auftreten können, ist es weniger schlimm, wenn ein Ad-hoc-Programm nur eine einzige Importanweisung enthält und diese ein vollständiger Import ist.
Im weiteren Verlaufe dieses Kurses werden vollständige Importe manchmal für Ad-hoc-Programme verwendet werden, weil dies in manchen Fällen etwas Zeit bei Bearbeitungen der Programm spart. Man sollte sich dies aber nicht zum Vorbild nehmen, wenn man bibliotheksfähigen Code schreiben will!
Eine kurze Schreibweise zum Import der drei Namen »pi«, »tau« und »e«, die kein schlechter Stil ist, ist: »from math import pi, tau, e«.
Teilnehmerfrage: Warum sind nicht gleich alle Namen importiert?
Bestimmte verbreitete Namen, wie »size« oder »name« sind in verschiedenen Modulen definiert. Man kann aber nur einen davon importieren. Daher ist es gar nicht möglich, alle Namen zu importieren. Hinzu kommt noch, daß der Import aller möglicher Namen einige der Nachteile hätte, die weiter oben für vollständige Importe beschrieben wurden.
Zitate zu Themen dieser Lektion ⃗
- The Python Language Reference, Release 3.8.0a0
2.3.2 Reserved classes of identifiers
Certain classes of identifiers (besides keywords) have special meanings. These classes are identified by the
patterns of leading and trailing underscore characters:_* Not imported by from module import *. The special identifier _ is used in the interactive interpreter
to store the result of the last evaluation; it is stored in the builtins module. When not in interactive
mode, _ has no special meaning and is not defined. See section The import statement.Note: The name _ is often used in conjunction with internationalization; refer to the documentation
for the gettext module for more information on this convention.