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.

5voto

Abhi31jeet Punkte 37

Eine der Anwendungen, die ich als sehr nützlich empfunden habe, ist die print_function von __future__ Modul.

In Python 2.7 wollte ich, dass Zeichen aus verschiedenen Druckanweisungen ohne Leerzeichen in derselben Zeile ausgegeben werden.

Dies kann mit einem Komma(",") am Ende geschehen, doch wird dabei auch ein zusätzliches Leerzeichen angefügt. Die obige Anweisung, wenn sie als :

from __future__ import print_function
...
print (v_num,end="")
...

Dies druckt den Wert von v_num aus jeder Iteration in einer einzigen Zeile ohne Leerzeichen.

5voto

jainakki Punkte 43

__future__ ist ein Python Modul . Es wurde hinzugefügt, um zu vermeiden, dass bestehende Tools, die Import-Anweisungen analysieren und erwarten, dass sie die Module finden, die sie importieren, verwirrt werden. Es wurde in Version 2.1 hinzugefügt, damit der Import von __future__ schlägt fehl, wenn sie vor Version 2.1 verwendet wird.

Nun sehen Sie sich diesen Code an:

>>> from __future__ import division
>>> division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 131072)

En Abteilung im Format von _Feature(OptionalRelease, MandatoryRelease, CompilerFlag) . OptionalFreigabe y ObligatorischeFreigabe sind beide 5-Tupel in der Form von:

(
 PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
 PY_MINOR_VERSION, # the 1; an int
 PY_MICRO_VERSION, # the 0; an int
 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
 PY_RELEASE_SERIAL # the 3; an int
)

In unserem Fall ist OptionalRelease also 2.2.0a2 und MandatoryRelease ist 3.0.0a0.

OptionalFreigabe gibt die erste Version an, in der das Merkmal akzeptiert wurde.

ObligatorischeFreigabe sagt voraus, wann das Merkmal Teil der Sprache sein wird, oder zeigt an, wann das Merkmal Teil der Sprache wurde; in Versionen, die zu diesem Zeitpunkt oder danach erscheinen, benötigen Module keine future-Anweisung mehr, um das betreffende Merkmal zu verwenden, können aber weiterhin solche Importe verwenden. Wenn ObligatorischeFreigabe keine ist, wird das geplante Merkmal verworfen.

CompilerFlag ist das (Bitfeld-)Flag, das als viertes Argument an die eingebaute Funktion übergeben werden soll kompilieren() um die Funktion in dynamisch kompiliertem Code zu aktivieren. Dieses Flag wird im Compiler_flag-Attribut von _Feature-Instanzen gespeichert.

-4voto

vikash gupta Punkte 35

Ab Python 3.0 ist print nicht mehr nur eine Anweisung, sondern eine Funktion und ist in PEP 3105 enthalten.

Auch ich denke, das Python 3.0-Paket hat noch diese spezielle Funktionalität. Lassen Sie uns seine Nutzbarkeit durch ein traditionelles "Pyramidenprogramm" in Python sehen:

from __future__ import print_function

class Star(object):
    def __init__(self,count):
        self.count = count

    def start(self):
        for i in range(1,self.count):
            for j in range (i): 
                print('*', end='') # PEP 3105: print As a Function 
            print()

a = Star(5)
a.start()

Output:
*
**
***
****

Wenn wir die normale Druckfunktion verwenden, werden wir nicht in der Lage sein, die gleiche Ausgabe zu erzielen, da print() mit einem zusätzlichen Zeilenumbruch versehen ist. Jedes Mal, wenn die innere for-Schleife ausgeführt wird, wird * in die nächste Zeile gedruckt.

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