Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python Enhancement Proposals

PEP 221 – Import As

Autor:
Thomas Wouters <thomas at python.org>
Status:
Final
Typ:
Standards Track
Erstellt:
15-Aug-2000
Python-Version:
2.0
Post-History:


Inhaltsverzeichnis

Einleitung

Dieses PEP beschreibt den import as Vorschlag für Python 2.0. Dieses PEP verfolgt den Status und die Zuständigkeit dieser Funktion. Es enthält eine Beschreibung der Funktion und skizziert die notwendigen Änderungen zur Unterstützung dieser Funktion. Die CVS-Revisionshistorie dieser Datei enthält die maßgebliche historische Aufzeichnung.

Begründung

Dieses PEP schlägt eine Erweiterung der Python-Syntax in Bezug auf die import und from <modul> import Anweisungen vor. Diese Anweisungen laden ein Modul und binden entweder dieses Modul an einen lokalen Namen oder binden Objekte aus diesem Modul an einen lokalen Namen. Manchmal ist es jedoch wünschenswert, diese Objekte unter einem anderen Namen zu binden, um beispielsweise Namenskonflikte zu vermeiden. Dies kann derzeit mit dem folgenden Idiom erreicht werden.

import os
real_os = os
del os

Und ähnlich für die from ... import Anweisung.

from os import fdopen, exit, stat
os_fdopen = fdopen
os_stat = stat
del fdopen, stat

Die vorgeschlagene Syntaxänderung würde beiden Anweisungen eine optionale as Klausel hinzufügen, wie folgt:

import os as real_os
from os import fdopen as os_fdopen, exit, stat as os_stat

Der as Name ist nicht als Schlüsselwort gedacht, und es muss eine gewisse Trickerei angewendet werden, um den CPython-Parser davon zu überzeugen, dass es keines ist. Für fortgeschrittenere Parser/Tokenizer sollte dies jedoch kein Problem darstellen.

Ein leicht spezieller Fall existiert beim Importieren von Untermodulen. Die Anweisung

import os.path

speichert das Modul os lokal als os, so dass das importierte Untermodul path als os.path zugänglich ist. Als Ergebnis,

import os.path as p

speichert os.path, nicht os, in p. Dies macht es effektiv dasselbe wie

from os import path as p

Implementierungsdetails

Dieses PEP wurde angenommen und die vorgeschlagene Codeänderung wurde eingecheckt. Der Patch kann immer noch im SourceForge Patch Manager gefunden werden [1]. Derzeit wird anstelle einer einfachen Zeichenkette ein NAME Feld in der Grammatik verwendet, um das Schlüsselwortproblem zu vermeiden. Es wird ein neuer Bytecode, IMPORT_STAR, eingeführt, der das Verhalten von from modul import * ausführt und das Verhalten des IMPORT_FROM Bytecodes ändert, so dass er den angeforderten Namen (der immer ein einzelner Name ist) auf den Stack lädt, um anschließend von einem STORE Opcode gespeichert zu werden. Infolgedessen folgen alle explizit importierten Namen den global Direktiven.

Der Sonderfall from modul import * bleibt ein Sonderfall, in dem keine as Klausel untergebracht werden kann und keine STORE Opcodes generiert werden; die importierten Objekte werden direkt in den lokalen Namensraum geladen. Dies bedeutet auch, dass Namen, die auf diese Weise importiert werden, immer lokal sind und nicht der global Direktive folgen.

Eine zusätzliche Änderung dieser Syntax wurde ebenfalls vorgeschlagen, um den Ausdruck nach der as Klausel zu verallgemeinern. Anstatt eines einzelnen Namens könnte es erlaubt sein, jeder Ausdruck zu sein, der einen gültigen l-Wert liefert; alles, dem etwas zugewiesen werden kann. Die Änderung zur Berücksichtigung dessen ist minimal, wie der Patch [2] beweist, und die resultierende Verallgemeinerung ermöglicht eine Reihe neuer Konstrukte, die vollständig parallel zu anderen Python-Zuweisungskonstrukten laufen. Diese Idee wurde jedoch von Guido als "Hyperverallgemeinerung" abgelehnt.

Referenzen


Quelle: https://github.com/python/peps/blob/main/peps/pep-0221.rst

Zuletzt geändert: 2025-02-01 08:55:40 GMT