2016-07-31 12 views
3

Ich habe mir die source code for __future__.py angeschaut und es ergibt für mich keinen Sinn - wie funktioniert das eigentlich, um das Verhalten der Division zu ändern?Wie behandelt Python "from __future__ import division"?

+2

My rate wäre, dass 'compiler_flag' dem Compiler signalisieren könnte, die Division zu ändern – Natecat

+0

interessant ... vielleicht verstehe ich einfach nicht, wie' import' wirklich funktioniert; Ich dachte, dass es das fragliche Modul evaluierte und dann ein Modulobjekt erstellte, das vollständig oder mit einer individuellen Eigenschaft in den Namensraumbereich gebracht werden konnte ('von xyz import abc'). Aber wenn man sich '__future __. Py' anschaut, scheint es, als ob dieses Modul ausgewertet wird, dann sollten alle Features aktiviert werden. Wie wählt "von __future__ import XYZ" die Erstellung von Objekten in '__future __. Py' aus? –

Antwort

4

Dieses Modul dient nur einem Dokumentations-/Introspektionszweck; keiner der Code darin tatsächlich tut nichts.

Vielmehr wenn Python ist ein Modul kompiliert, ruft es PyFuture_FromAST auf dem Modul, das für from __future__ import Aussagen überprüft, und vorausgesetzt, sie sind gültig, sets the appropriate flags auf ein PyFutureFeatures Objekt. Der Compiler geht dann und sets those flags in the compiler context, bevor Sie fortfahren und das Modul tatsächlich kompilieren.

Zum Vergleich, können Sie das in Python 3, siehe __future__.py ist immer noch die gleiche und enthält alle die gleichen Informationen, aber in future.c, none of the features actually set any flags weil alle diese Funktionen sind standardmäßig in Python aktiviert 3.

+0

Hinweis: Alle Linienzahlen sind zu dem Zeitpunkt korrekt, an dem ich das geschrieben habe. Ich konnte nicht herausfinden, wie ich hgweb dazu bringen konnte, auf eine bestimmte Revision zu verlinken, damit sie in Zukunft nicht schlechter werden. Wenn jemand die Links bearbeiten möchte, um sie dauerhafter zu machen, sollten sie dies tun. – hobbs

+0

, so dass der Python-Interpreter tatsächlich über 'from __future__ import xyz' Bescheid weiß und diese speziell behandelt (nicht das gleiche wie' von normalem_Modul import xyz')? –

+0

@JasonS korrekt. Es ist wie eine Pragma oder Compiler-Direktive in anderen Sprachen. – hobbs

Verwandte Themen