2016-10-22 1 views
3

lese ich mich PEP338 .Einige Worte verwirrt:Haben Module in Python Typen?

Wenn das Modul gefunden wird, und ist von TypPY_SOURCE oder PY_COMPILED, dann wird die Befehlszeile effektiv von python <options> -m <module> <args> zu python <options> <filename> <args> neu interpretiert .

Haben Module in Python Typen?

+1

Es gibt * Arten von Modulen *, da sie aus einer bytecompilierten Cachedatei oder aus einer Quelle stammen. Das Wort * type * ist nicht dasselbe wie die Klasse eines Objekts. –

+1

Siehe über Python-Dateierweiterungen http://Stackoverflow.com/a/18032741/6575931 – Uriel

Antwort

5

Module können von verschiedenen Quellen geladen werden. Der Autor bezieht sich auf 2-spezifischen Quellen wurde das Modul geladen aus siehe imp module documentation:

imp.PY_SOURCE
das Modul als Quelldatei gefunden wurde.

[...]

imp.PY_COMPILED
Das Modul wurde als kompilierte Code Objektdatei gefunden.

[...]

imp.C_EXTENSION
Das Modul wurde als dynamisch ladbare gemeinsam genutzte Bibliothek gefunden.

Diese Werte werden unter anderem im Rückgabewert imp.get_suffixes() function verwendet.

Das PEP besagt, dass nur Module unterstützt werden, die aus Quelldateien (.py Dateien) und aus einer Bytecode-Cachedatei (.pyc) geladen wurden; Der Switch -m unterstützt keine C-Erweiterungsmodule (normalerweise .so oder .dll dynamisch geladene Bibliotheken).

Das resultierende Modulobjekt ist immer noch ein Modulobjekt; Das Wort Typ in dem Text, den Sie gefunden haben, bezieht sich nicht auf Pythons Typsystem.

1

Der Modultyp bedeutet die Typ der Datei wo das Modul gespeichert ist, als Python-Dateien haben einige mögliche Arten (und Erweiterungen.

Die häufigsten sind kompiliert Python-Dateien (pyc Erweiterung) oder die regelmäßige, python Ebene Quelle (py)

Es gibt viele andere py Dateierweiterungen finden Sie in der (fast) vollständige Liste hier:. https://stackoverflow.com/a/18032741/6575931.

+0

Danke für Ihre nette Hilfe, ich lese die Inhalte verknüpft –

1

aus dem Link Zitiert PEP338

Proposed Semantiken Die vorgeschlagenen Semantik sind ziemlich einfach: Wenn -m verwendet, um ein Modul der PEP 302 import auszuführen Mechanismen zu die verwendet werden, lokalisieren Modul und abrufen Sie seinen kompilierten Code, bevor Sie das Modul in Übereinstimmung mit der Semantik für ein Modul der obersten Ebene ausführen.

Lassen Sie uns nun auf die Dokumentation von imp beziehen (der Importmechanismus) und die verschiedenen Arten von Modulen bestimmen, die imp.get_suffixes()

importiert werden können

imp.get_suffixes() eine Liste von Rück 3-Element Tupel, die jeweils eine bestimmte Art von Modul beschreiben. Jede Dreiergruppe hat die Form (Suffix, Modus, Typ), wobei Suffix eine Zeichenfolge ist, die an den Modulnamen angehängt wird, an Form der Dateiname zu suchen, Modus ist die Moduszeichenfolge, die an das integrierte Öffnen übergeben wird () Funktion zum Öffnen der Datei (dies kann 'r' für Textdateien oder 'rb' für Binärdateien sein) und Typ ist der Dateityp , der einen der Werte PY_SOURCE, PY_COMPILED oder C_EXTENSION, beschrieben hat unten.

und anschließend erklärt sie, was die verschiedenen Typen sind

imp.PY_SOURCE Das Modul als Quelldatei gefunden wurde.

imp.PY_COMPILED Das Modul wurde als kompilierte Code-Objektdatei gefunden.

imp.C_EXTENSION Das Modul wurde als dynamisch ladbare gemeinsame Bibliothek gefunden.

So erwähnt die Typen in PEP 338 sind nichts anderes als die Typen von Modulen, die und von diesen nur PY_SOURCE importiert werden können oder PY_COMPILED sind die einzigen zwei Arten aus dem obigen drei der Befehlszeile effektiv aus Python neu interpretiert -m zu Python.

+0

Danke für Ihre nette Hilfe, und Ihre Antwort ist auch toll. –