__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:
χαρακτηριστικό |
προαιρετικό στην |
υποχρεωτικό στην |
αποτέλεσμα |
|---|---|---|---|
|
2.1.0b1 |
2.2 |
PEP 227: Στατικά Εμφωλευμένα Πεδία |
|
2.2.0a1 |
2.3 |
PEP 255: Απλές Γεννήτριες |
|
2.2.0a2 |
3.0 |
PEP 238: Αλλαγή του Τελεστή Διαίρεσης |
|
2.5.0a1 |
3.0 |
PEP 328: Εισαγωγές: Πολλαπλών Γραμμών και Απόλυτες/Σχετικές |
|
2.5.0a1 |
2.6 |
PEP 343: Η Δήλωση “with” |
|
2.6.0a2 |
3.0 |
PEP 3105: Μετατροπή της print σε συνάρτηση |
|
2.6.0a2 |
3.0 |
PEP 3112: Λεκτικές Σταθερές Bytes στην Python 3000 |
|
3.5.0b1 |
3.7 |
PEP 479: Χειρισμός του StopIteration μέσα σε γεννήτριες |
|
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__.