Während der Import von *
aus dem zukünftigen Modul wahrscheinlich gefährlich ist und aus den Gründen, die John Zwinck erwähnt, vermieden werden sollte, war es interessant herauszufinden, warum das nicht funktioniert. Es funktioniert anders als die übliche Python-Import-Syntax, mit der Sie alles aus dem Modul mit *
greifen können.
Sie können sehen, was passiert, indem Sie Lib/compiler/future.py
in Ihrem Python-Installationsverzeichnis öffnen:
Alle Importanweisungen, die aus __future__
importieren, werden über einen speziellen Parser ausgeführt, der nur das Importieren einer der vordefinierten Funktionen ermöglicht. Aus dem Quellcode von FutureParser
:
Sie haben also zu Recht bemerkt, dass der Import von __future__
ein Sonderfall ist, der ein wenig anders funktioniert als der übliche Python-Import-Prozess, aber dafür gibt es gute Gründe.
Das Importieren von "allem" aus der Zukunft ist weder wünschenswert noch sinnvoll. In der Tat sollten Sie die meiste Zeit nicht *
importieren, aber im Falle von __future__
ist es besonders heimtückisch: welche Funktionen wollen Sie bekommen? Es wäre sehr schwierig, ein korrektes Programm zu schreiben, das mit zukünftigen Versionen von Python funktioniert, deren Eigenschaften noch nicht bekannt sind.
Tags und Links python python-internals