__future__ — Ορισμοί δηλώσεων μελλοντικών χαρακτηριστικών (Future statements)

Πηγαίος κώδικας: Lib/__future__.py


Οι εισαγωγές της μορφής from __future__ import feature ονομάζονται δηλώσεις μελλοντικών χαρακτηριστικών (future statements). Αυτές αποτελούν ειδικές περιπτώσεις για τον μεταγλωττιστή (compiler) της Python ώστε να επιτρέπεται η χρήση νέων χαρακτηριστικών της Python σε ενότητες (modules) που περιέχουν τη δήλωση πριν από την έκδοση στην οποία το χαρακτηριστικό γίνεται πρότυπο.

While these future statements are given additional special meaning by the Python compiler, they are still executed like any other import statement and the __future__ exists and is handled by the import system the same way any other Python module would be. This design serves three purposes:

  • Για την αποφυγή σύγχυσης υπαρχόντων εργαλείων που αναλύουν δηλώσεις εισαγωγής και αναμένουν να βρουν τις ενότητες που εισάγουν.

  • To document when incompatible changes were introduced, and when they will be — or were — made mandatory. This is a form of executable documentation, and can be inspected programmatically via importing __future__ and examining its contents.

  • To ensure that future statements run under releases prior to Python 2.1 at least yield runtime exceptions (the import of __future__ will fail, because there was no module of that name prior to 2.1).

Περιεχόμενα Ενότητας

No feature description will ever be deleted from __future__. Since its introduction in Python 2.1 the following features have found their way into the language using this mechanism:

χαρακτηριστικό

προαιρετικό στην

υποχρεωτικό στην

αποτέλεσμα

__future__.nested_scopes

2.1.0b1

2.2

PEP 227: Στατικά Εμφωλευμένα Πεδία

__future__.generators

2.2.0a1

2.3

PEP 255: Απλές Γεννήτριες

__future__.division

2.2.0a2

3.0

PEP 238: Αλλαγή του Τελεστή Διαίρεσης

__future__.absolute_import

2.5.0a1

3.0

PEP 328: Εισαγωγές: Πολλαπλών Γραμμών και Απόλυτες/Σχετικές

__future__.with_statement

2.5.0a1

2.6

PEP 343: Η Δήλωση “with”

__future__.print_function

2.6.0a2

3.0

PEP 3105: Μετατροπή της print σε συνάρτηση

__future__.unicode_literals

2.6.0a2

3.0

PEP 3112: Λεκτικές Σταθερές Bytes στην Python 3000

__future__.generator_stop

3.5.0b1

3.7

PEP 479: Χειρισμός του StopIteration μέσα σε γεννήτριες

__future__.annotations

3.7.0b1

Never [1]

PEP 563: Αναβαλλόμενη αξιολόγηση σχολιασμών *, :pep:`649`: *Καθυστερημένη αξιολόγηση σχολιασμών με χρήση περιγραφέων

class __future__._Feature

Κάθε δήλωση στο αρχείο __future__.py έχει τη μορφή:

FeatureName = _Feature(OptionalRelease, MandatoryRelease,
                       CompilerFlag)

όπου, κανονικά, το OptionalRelease είναι μικρότερο από το MandatoryRelease, και τα δύο είναι πλειάδες 5 στοιχείων (5-tuples) της ίδιας μορφής με το sys.version_info:

(PY_MAJOR_VERSION, # το 2 στο 2.1.0a3· ένας ακέραιος (int)
 PY_MINOR_VERSION, # το 1· ένας ακέραιος (int)
 PY_MICRO_VERSION, # το 0· ένας ακέραιος (int)
 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" ή "final"· συμβολοσειρά (string)
 PY_RELEASE_SERIAL # το 3· ένας ακέραιος (int)
)
_Feature.getOptionalRelease()

Το OptionalRelease καταγράφει την πρώτη έκδοση στην οποία έγινε δεκτό το χαρακτηριστικό.

_Feature.getMandatoryRelease()

Στην περίπτωση ενός MandatoryRelease που δεν έχει συμβεί ακόμα, το MandatoryRelease προβλέπει την έκδοση στην οποία το χαρακτηριστικό θα γίνει μέρος της γλώσσας.

Ειδάλλως, το MandatoryRelease καταγράφει πότε το χαρακτηριστικό έγινε μέρος της γλώσσας· σε εκδόσεις κατά ή μετά από αυτήν, οι ενότητες δεν χρειάζονται πλέον μια δήλωση μελλοντικού χαρακτηριστικού για να χρησιμοποιήσουν το εν λόγω χαρακτηριστικό, αλλά μπορούν να συνεχίσουν να χρησιμοποιούν τέτοιες εισαγωγές.

Το MandatoryRelease μπορεί επίσης να είναι None, που σημαίνει ότι ένα προγραμματισμένο χαρακτηριστικό απορρίφθηκε ή ότι δεν έχει αποφασιστεί ακόμη.

_Feature.compiler_flag

Το CompilerFlag είναι το flag (bitfield) που πρέπει να μεταβιβαστεί στο τέταρτο όρισμα της ενσωματωμένης συνάρτησης compile() για να ενεργοποιηθεί το χαρακτηριστικό σε δυναμικά μεταγλωττισμένο κώδικα. Αυτή η σημαία αποθηκεύεται στο γνώρισμα (attribute) _Feature.compiler_flag των στιγμιότυπων (instances) της κλάσης _Feature.

Δείτε επίσης

Μελλοντικές δηλώσεις

Πώς ο μεταγλωττιστής χειρίζεται τις μελλοντικές εισαγωγές (future imports).

PEP 236 - Επιστροφή στο __future__

Η αρχική πρόταση για τον μηχανισμό του __future__.