Ich sah nach dem in einem Skript des Schülers, und zu meiner Überraschung funktioniert es:Macht Python bei einem Multi-Segment-Import etwas extra?
>>> import os.path
Die Frage ist, kurz gesagt, ist: Wie diese verschiedenen von einfachen import os
ist? Oder ist es das gleiche, außer dass os.path
existiert?
Wie Sie unten sehen können, definiert es nicht path
in meinem Bereich, sondern os
.
>>> dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'os']
Die Frage ist also: Was macht Python damit? Das Modul os
wird importiert (und damit ausgeführt). Es stellt auch sicher, dass os.path
zu etwas Gültigem aufgelöst wird. (Danke an @Lee und @Stuart für die Links zu der Dokumentation, die es bestätigt.) Aber gibt es mehr? Oder ist import pkg.submod
immer äquivalent zu import pkg
(vorausgesetzt, pkg.submod
existiert)?
Wenn ich os
importiere, importiert/führt es bereits alle Module aus, die os
importiert; So ist os.path
bereits geladen. Gibt es Vereinbarungen (nicht zu exotisch), bei denen der Import von pkg.submod
dazu führen kann, dass anderer Code ausgeführt wird, oder in anderer Reihenfolge oder mit anderen Nebenwirkungen, als nur pkg
zu importieren? Und gibt es legitime Anwendungsfälle für das Multi-Segment-Formular? (Um es anders auszudrücken: Was ist der Punkt)
die relevanten Dokumente hier https: //docs.python .org/3.5/tutorial/modules.html # packages – Stuart
Beachten Sie, dass 'os.path' ein Sonderfall ist, da es kein tatsächliches Submodul mit diesem Namen gibt; 'os' selbst importiert' posixpath' oder 'ntpath' als' path'. –