Modulnamenimportanweisungen in Python
Eine Modulnamenimportanweisung besteht nur aus dem Wort »import« und einem Modulnamen.
- Syntaxdiagramm
Modulnamenimportanweisung
.------. .------.
--->( import )--->| Name |--->
'------' '------'Anweisung
.---------------------------.
---.--->| Auswertungsanweisung |---.--->
| '---------------------------' |
| .---------------------------. |
'--->| from-Importanweisung |---'
| '---------------------------' |
| .---------------------------. |
'--->| Modulnamenimportanweisung |---'
'---------------------------'
Durch die Ausführung einer Modulnamenimportanweisung (also durch einen Modulnamenimport ) wird der Name des angegebenen Moduls in den aktuellen Gültigkeitsbereich übernommen.
- Protokoll (frei übersetzt und vereinfacht)
from math import pi
math
Namensfehler: Der Name 'math' ist nicht definiert.
- Protokoll (frei übersetzt und vereinfacht)
import math
math
<Modul 'math' (eingebaut)>
- Protokoll
import math
type( math )
<class 'module'>
Die Angabe »eingebaut« (»built-in«) besagt oben, daß das Modul ein fester Bestandteil der Python-Implementation ist (und nicht erst bei Bedarf von einem Massenspeicher eingelesen wird).
Der Modulnamenimport importiert keine anderen Namen außer den Namen des Moduls. Es werden also nicht etwa die Namen importiert, die in dem Modul enthalten sind!
Nach »import math« kann man also nicht etwa »floor« aufrufen.
- Protokoll
floor( 0.0 )
Namensfehler: Der Name 'floor' ist nicht definiert.
Es ist auch möglich, sich Erklärungen zum Modul »math« anzeigen zu lassen.
- Protokoll
help( math )
- Protokoll (Ausgabe gekürzt)
import math
help( math )
Help on built-in module math:
NAME
math
DESCRIPTION
This module is always available. It provides access to the
mathematical functions defined by the C standard.
FUNCTIONS
acos(...)
acos(x)
Return the arc cosine (measured in radians) of x.
Nach dem Start der Python -Implementation steht der Inhalt des Moduls »builtins« zur Verfügung, zu dem sich ebenfalls Erklärungen anzeigen lassen, aber erst nachdem der Name jenes Moduls importiert wurde.
- Anzeigen von Erklärungen zum Modul »builtins«
import builtins
help( builtins )
(Die Ausgabe kann mit der Taste Q abgebrochen werden.)
(In CPython ist der Name »__builtins__« bereits von Anfang an immer an das Modul »builtins« gebunden, ohne daß er erst importiert werden muß.)
Das aktuelle Skript (Hauptprogramm) gilt ebenfalls als ein Modul. Es hat den Namen »__main__«, der allerdings ebenfalls erst importiert werden muß, bevor er verwendet werden kann. Dann kann beispielsweise mit »dir« ein Verzeichnis der Namen aus »__main__« angezeigt werden.
- Protokoll
import __main__
help( __main__ )
- PEP8
- Imports should usually be on separate lines, e.g.:
- Yes:
import os
import sys
- No:
import os, sys
- It’s okay to say this though:
from subprocess import Popen, PIPE
Einige spezielle Module
Wir nennen im folgenden die Namen einiger spezieller Module.
- Spezielle Module
builtins
__main__
Die Namen aus den Modulen »builtins« und »__main__« stehen direkt nach dem Start einer Python -Implementation zur Verfügung, ohne daß sie voher importiert werden müssen. Die Namen »builtins« und »__main__« selber können aber erst nach ihrem Import verwendet werden.
Je nach der verwendeten Python -Version können sich bei den Inhalten von Modulen Abweichungen von dem oben Gezeigten ergeben.
»builtins« und »__builtins__« ⃗
Mit dem Vergleichsoperator kann man erkennen, daß ein importierter Namen »builtins« dieselbe Bedeutung wie der vorhandene Name »__builtins__« hat.
- Protokoll
import builtins
builtins == __builtins__
True
Der Name »__builtins__« ist nur in einigen Python -Implementationen, wie beispielsweise CPython, vorhanden.
»__builtins__« sollte nie verwendet werden. Statt seiner sollte bei Bedarf der Name »builtins« importiert und verwendet werden.
Der Name »__name__«
Der Name »__name__« ist an ein str-Objekt mit dem Namen des Moduls, in dem er verwendet wird, gebunden.
- Auswertung
__name__
'__main__'
»dir«
»dir« mit Argumenten
Auch die Funktion »dir« ist variadisch.
Man kann sie mit einem Argument aufrufen, das ein Modul angibt. Dann werden die Namen der Bindungstabelle jenes Moduls ausgegeben.
Wir können Namen aus Modulen auflisten, indem wir die Module als Argumente von »dir« verwenden.
Es ist nach »import math« möglich, sich die Namen aus der Bindungstabelle des Moduls anzeigen zu lassen.
- Protokoll
import math
from pprint import pprint
dir( math )
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
len( _ )
60
len( dir( math ))
60
- Namen aus dem Modul »builtins« (Ausgabe manuell umformatiert)
import builtins
dir( builtins )
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
- Namen aus dem Modul »__main__« (Ausgabe manuell umformatiert)
import __main__
dir( __main__ )
['__annotations__', '__builtins__', '__doc__', '__loader__', '__main__', '__name__', '__package__', '__spec__' ]
(Die Details der Ausgabe können sich von Python -Implementation zu Python -Implementation unterscheiden.)
»dir« ohne Argumente
»dir()« ohne Argumente bedeutet (innerhalb von »__main__«) dasselbe wie »dir( __main__ )« (nach »import __main__«).
- Namen aus dem Modul »__main__« (Ausgabe manuell umformatiert) vor allen Importen
dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
Die Dokumentation von »dir«
Daß »dir« variadisch ist, also daß man das Argument auch weglassen kann, wird in der Dokumentation von »dir« dadurch ausgedrückt, daß der Parametername in eckige Klammern geschrieben wird.
- Auszug aus der Dokumentation
>>> help( dir )
Help on built-in function dir in module builtins:
dir(...)
dir([object]) -> list of strings
Ändern der Bindung eines Namens ⃗
- Konsolenprotokoll
from pprint import pprint
pprint
<function pprint at …>
import pprint
pprint
<module 'pprint' from 'C:\\Users\\s\\AppData\\Local\\Programs\\Python\\Python39\\lib\\pprint.py'>
from pprint import pprint
pprint
<function pprint at …>
Spezielle Namen aus CPython ⃗
Der Name »__builtins__« (nicht zu verwechseln mit »builtins«!) kann in CPython aber auch ohne Import verwendet werden, jedoch sollte er normalerweise nicht verwendet werden. Er wurde in diesem Kurs nur solange verwendet, wie Modul-Import-Anweisungen noch nicht behandelt wurden.
Der Namen »__builtins__« sollte ab jetzt nicht mehr verwendet werden.