930 Stimmen

Wofür wird __future__ in Python verwendet und wie/wann man es benutzt, und wie es funktioniert

__future__ erscheint häufig in Python-Modulen. Ich verstehe nicht, was __future__ ist und wie/wann sie zu verwenden ist, auch nach der Lektüre der Python __future__ doc .

Kann jemand dies anhand von Beispielen erläutern?

Ein paar Antworten zur grundlegenden Verwendung von __future__ die ich erhalten habe, scheinen korrekt zu sein.

Ich muss jedoch noch eine Sache verstehen, und zwar wie __future__ funktioniert:

Das verwirrendste Konzept für mich ist, wie eine aktuelle Python-Version Funktionen für zukünftige Versionen enthält und wie ein Programm, das eine Funktion aus einer zukünftigen Version verwendet, erfolgreich in der aktuellen Version von Python kompiliert werden kann.

Ich vermute, dass die aktuelle Version ein Paket mit potenziellen Funktionen für die Zukunft enthält. Allerdings sind die Funktionen nur verfügbar, wenn man __future__ weil sie nicht dem aktuellen Standard entsprechen. Lassen Sie mich wissen, ob ich richtig liege.

15 Stimmen

Dies ist der ursprüngliche Vorschlag für die künftige Erklärung. Ich fand ihn hilfreich, um zu verstehen, warum es ihn überhaupt gibt und wann und wie er zu verwenden ist, ergibt sich von selbst. python.org/dev/peps/pep-0236

7 Stimmen

Eine future-Anweisung ist eine Anweisung an den Compiler, dass ein bestimmtes Modul mit einer Syntax oder Semantik kompiliert werden soll, die in einer bestimmten zukünftigen Version von Python verfügbar sein wird. Die future-Anweisung soll die Migration auf zukünftige Versionen von Python erleichtern, die inkompatible Änderungen an der Sprache einführen. Sie ermöglicht die Verwendung der neuen Funktionen auf Modulbasis vor der Version, in der die Funktion zum Standard wird.

523voto

glglgl Punkte 84928

Mit __future__ Moduls können Sie sich langsam an inkompatible Änderungen oder an solche, die neue Schlüsselwörter einführen, gewöhnen.

Um z. B. Kontextmanager zu verwenden, mussten Sie Folgendes tun from __future__ import with_statement in 2.5, da die with Schlüsselwort war neu und sollte nicht mehr als Variablenname verwendet werden. Für die Verwendung von with als ein Python-Schlüsselwort in Python 2.5 oder älter, müssen Sie den Import von oben verwenden.

Ein weiteres Beispiel ist

from __future__ import division
print 8/7  # prints 1.1428571428571428
print 8//7 # prints 1

Ohne die __future__ Sachen, sowohl print Anweisungen würden Folgendes drucken 1 .

Der interne Unterschied besteht darin, dass ohne diese Einfuhr, / wird auf den __div__() Methode, während mit ihr, __truediv__() verwendet wird. (In jedem Fall, // ruft auf. __floordiv__() .)

Apropos print : print wird in 3.x zu einer Funktion und verliert seine besondere Eigenschaft als Schlüsselwort. Es ist also genau andersherum.

>>> print

>>> from __future__ import print_function
>>> print
<built-in function print>
>>>

246voto

agf Punkte 159286

Wenn Sie das tun

from __future__ import whatever

Sie verwenden nicht wirklich eine import Anweisung, sondern eine künftige Erklärung . Sie lesen die falschen Dokumente, da Sie das Modul nicht wirklich importieren.

Future-Anweisungen sind etwas Besonderes - sie ändern, wie Ihr Python-Modul geparst wird, weshalb sie muss am Anfang der Datei stehen. Sie geben den Wörtern oder Symbolen in Ihrer Datei eine neue - oder andere - Bedeutung. Aus den Unterlagen:

Eine future-Anweisung ist eine Anweisung an den Compiler, dass ein bestimmtes Modul mit einer Syntax oder Semantik kompiliert werden soll, die in einer bestimmten zukünftigen Version von Python verfügbar sein wird. Die future-Anweisung soll die Migration auf zukünftige Versionen von Python erleichtern, die inkompatible Änderungen an der Sprache einführen. Sie ermöglicht die Verwendung der neuen Funktionen auf Modulbasis vor der Version, in der die Funktion zum Standard wird.

Wenn Sie tatsächlich die __future__ Modul, tun Sie einfach

import __future__

und greifen Sie dann wie gewohnt darauf zu.

149voto

CodeArtist Punkte 5194

__future__ ist ein Pseudomodul, das Programmierer verwenden können, um neue Sprachfunktionen zu aktivieren, die nicht mit dem aktuellen Interpreter kompatibel sind . Zum Beispiel kann der Ausdruck 11/4 wird derzeit ausgewertet zu 2 . Wenn das Modul, in dem es ausgeführt wird, eine echte Division durch Ausführen ermöglicht hat:

from __future__ import division

der Ausdruck 11/4 würde auswerten zu 2.75 . Durch das Importieren der __future__ Modul und die Auswertung seiner Variablen können Sie feststellen, wann eine neue Funktion zum ersten Mal in die Sprache aufgenommen wurde und wann sie zum Standard wird:

>>> import __future__
>>> __future__.division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)

66voto

Mihai Maruseac Punkte 20459

Es kann verwendet werden, um Funktionen zu nutzen, die in neueren Versionen erscheinen, während man eine ältere Version von Python hat.

Zum Beispiel

>>> from __future__ import print_function

ermöglicht Ihnen die Verwendung von print als Funktion:

>>> print('# of entries', len(dictionary), file=sys.stderr)

29voto

Praym Punkte 1948

Oder ist es so, als würde man sagen: "Da dies Python 2.7 ist, verwende die andere 'print'-Funktion, die auch zu Python 2.7 hinzugefügt wurde, nachdem sie in Python 3 hinzugefügt wurde. Mein 'print' wird also nicht mehr aus Anweisungen bestehen (z.B. print "message" ), sondern aus Funktionen (z.B. print("message", options). Auf diese Weise, wenn mein Code in Python 3 ausgeführt wird, wird 'print' nicht abbrechen.

En

from __future__ import print_function

print_function ist das Modul, das die neue Implementierung von "print" enthält, so wie sie sich in Python v3 verhält.

Hier finden Sie weitere Erklärungen: http://python3porting.com/noconv.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X