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"?
Antwort
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.
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
, 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')? –
@JasonS korrekt. Es ist wie eine Pragma oder Compiler-Direktive in anderen Sprachen. – hobbs
- 1. von __future__ Import Verwendung in Mako Vorlage
- 2. Irgendwelche __future__ Import für Range-Xrange Inkompatibilität?
- 3. Welche Python-Version benötigt von __future__ import with_statement?
- 4. Kann ich "from __future__ import unicode_literals" in einer Master-Importdatei verwenden?
- 5. Wie behandelt Ruby Zero Division?
- 6. Warum verursacht von __future__ import * einen Fehler?
- 7. 'von __future__ import unicode_literals' in Django Migrationen
- 8. Welche __future__ Features sollte ich in Python v2.6.2 importieren?
- 9. Also was genau macht "aus __future__ import barry_as_FLUFL"?
- 10. doctest nicht erkennen __future __ Division
- 11. Verwenden von __future__ Stilimporten für modulspezifische Funktionen in Python
- 12. Python: While-Schleife - wie vermeide ich Division durch Null?
- 13. Führt "from-import" das gesamte Modul aus?
- 14. Wie behandelt man Division durch Null in MongoDB Aggregation Framework
- 15. Python-Thread-Pool, der Ausnahmen behandelt
- 16. Wie behandelt Python Speicher?
- 17. Ignorieren Division von 0 Warnung in Python
- 18. Python Import beim Import cv2
- 19. Warum schlägt der 'from-import' mit PyRun_SimpleString fehl?
- 20. wie __future__ für das Keyword-only-Argument von Python 3.0 zu importieren?
- 21. Import Fehler in Python
- 22. Import Medien auf Python gibt Import Fehler
- 23. Sublime Text 2. Autocomplete python `from`
- 24. Entfernen Python Kreis import
- 25. Python-Etikette: Import-Module
- 26. Python Import Strich Modul
- 27. Wie behandelt man den KeyError in Python?
- 28. von früheren Import print_statement
- 29. Python: Wildcard-Subset-Import
- 30. Python Unittest Import Probleme
My rate wäre, dass 'compiler_flag' dem Compiler signalisieren könnte, die Division zu ändern – Natecat
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? –