__future__ — Ορισμοί δηλώσεων μελλοντικών χαρακτηριστικών (Future statements)¶
Πηγαίος κώδικας: Lib/__future__.py
Οι εισαγωγές της μορφής from __future__ import feature ονομάζονται δηλώσεις μελλοντικών χαρακτηριστικών (future statements). Αυτές αποτελούν ειδικές περιπτώσεις για τον μεταγλωττιστή (compiler) της Python ώστε να επιτρέπεται η χρήση νέων χαρακτηριστικών της Python σε ενότητες (modules) που περιέχουν τη δήλωση πριν από την έκδοση στην οποία το χαρακτηριστικό γίνεται πρότυπο.
Αν και ο μεταγλωττιστής της Python δίνει σε αυτές τις δηλώσεις επιπλέον ειδική σημασία, εξακολουθούν να εκτελούνται όπως κάθε άλλη δήλωση εισαγωγής (import) και το __future__ υπάρχει και τυγχάνει χειρισμού από το σύστημα εισαγωγής με τον ίδιο τρόπο που θα γινόταν για οποιαδήποτε άλλη ενότητα Python. Αυτός ο σχεδιασμός εξυπηρετεί τρεις σκοπούς:
Για την αποφυγή σύγχυσης υπαρχόντων εργαλείων που αναλύουν δηλώσεις εισαγωγής και αναμένουν να βρουν τις ενότητες που εισάγουν.
Για την τεκμηρίωση του πότε εισήχθησαν μη συμβατές αλλαγές και πότε θα γίνουν — ή έγιναν — υποχρεωτικές. Αυτή είναι μια μορφή εκτελέσιμης τεκμηρίωσης και μπορεί να εξεταστεί προγραμματιστικά μέσω της εισαγωγής του
__future__και της εξέτασης των περιεχομένων του.Για να διασφαλιστεί ότι οι δηλώσεις μελλοντικών χαρακτηριστικών που εκτελούνται σε εκδόσεις πριν από την Python 2.1 θα παράγουν τουλάχιστον εξαιρέσεις χρόνου εκτέλεσης (η εισαγωγή του
__future__θα αποτύχει, επειδή δεν υπήρχε ενότητα με αυτό το όνομα πριν από την έκδοση 2.1).
Περιεχόμενα Ενότητας¶
Καμία περιγραφή χαρακτηριστικού δεν θα διαγραφεί ποτέ από το __future__. Από την εισαγωγή του στην Python 2.1, τα ακόλουθα χαρακτηριστικά έχουν ενσωματωθεί στη γλώσσα χρησιμοποιώντας αυτόν τον μηχανισμό:
χαρακτηριστικό |
προαιρετικό στην |
υποχρεωτικό στην |
αποτέλεσμα |
|---|---|---|---|
|
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__.