Κυκλοφορία της γλώσσας προγραμματισμού Python 3.10

Μετά από ένα χρόνο ανάπτυξης, παρουσιάζεται η σημαντική κυκλοφορία της γλώσσας προγραμματισμού Python 3.10. Ο νέος κλάδος θα υποστηρίζεται για ενάμιση χρόνο, μετά τον οποίο για άλλα τρεισήμισι χρόνια θα δημιουργηθούν διορθώσεις για την εξάλειψη των τρωτών σημείων.

Ταυτόχρονα, ξεκίνησε η άλφα δοκιμή του κλάδου Python 3.11 (σύμφωνα με το νέο πρόγραμμα ανάπτυξης, η εργασία σε ένα νέο κλάδο ξεκινά πέντε μήνες πριν από την κυκλοφορία του προηγούμενου κλάδου και φτάνει στο στάδιο άλφα δοκιμής μέχρι την επόμενη έκδοση ). Ο κλάδος Python 3.11 θα είναι σε κυκλοφορία alpha για επτά μήνες, κατά τους οποίους θα προστεθούν νέες δυνατότητες και θα διορθωθούν σφάλματα. Μετά από αυτό, οι εκδόσεις beta θα δοκιμαστούν για τρεις μήνες, κατά τους οποίους θα απαγορεύεται η προσθήκη νέων χαρακτηριστικών και θα δοθεί όλη η προσοχή στη διόρθωση σφαλμάτων. Τους τελευταίους δύο μήνες πριν από την κυκλοφορία, το υποκατάστημα θα βρίσκεται στο στάδιο της υποψήφιας κυκλοφορίας, στο οποίο θα γίνει η τελική σταθεροποίηση.

Οι νέες προσθήκες στην Python 3.10 περιλαμβάνουν:

  • Εφαρμόστηκαν τελεστές "match" και "case" για αντιστοίχιση προτύπων, οι οποίοι βελτιώνουν την αναγνωσιμότητα κώδικα, απλοποιούν την αντιστοίχιση αυθαίρετων αντικειμένων Python και αυξάνουν την αξιοπιστία κώδικα μέσω προηγμένου ελέγχου στατικού τύπου. Η υλοποίηση μοιάζει πολύ με τον τελεστή "ταιριάσματος" που παρέχεται στα Scala, Rust και F#, ο οποίος συγκρίνει το αποτέλεσμα μιας καθορισμένης έκφρασης με μια λίστα μοτίβων που παρατίθενται σε μπλοκ με βάση τον τελεστή "case".

    def http_error(status): κατάσταση αντιστοίχισης: υπόθεση 400: επιστροφή "Κακό αίτημα" υπόθεση 401|403|404: επιστροφή "Δεν επιτρέπεται" περίπτωση 418: επιστροφή "Είμαι τσαγιέρα" θήκη _: επιστροφή "Κάτι άλλο"

    Μπορείτε να αποσυσκευάσετε αντικείμενα, πλειάδες, λίστες και αυθαίρετες ακολουθίες για να συνδέσετε μεταβλητές με βάση τις υπάρχουσες τιμές. Επιτρέπεται ο ορισμός ένθετων προτύπων, η χρήση πρόσθετων συνθηκών "if" στο πρότυπο, η χρήση μασκών ("[x, y, *rest]"), αντιστοιχίσεις κλειδιών/τιμών (για παράδειγμα, {"εύρος ζώνης": b, "latency ”: l} για να εξαγάγετε τις τιμές "εύρος ζώνης" και "λανθάνουσα κατάσταση" από ένα λεξικό), να εξαγάγετε υποπρότυπα (":=" τελεστής), να χρησιμοποιήσετε επώνυμες σταθερές σε ένα πρότυπο. Στις κλάσεις, είναι δυνατή η προσαρμογή της συμπεριφοράς αντιστοίχισης χρησιμοποιώντας τη μέθοδο "__match__()".

    από κλάσεις δεδομένων εισαγωγή κατηγορίας δεδομένων @dataclass class Σημείο: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Somewhere other") case _: print("Not a point") match point: case Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"Όχι στη διαγώνιο") ΚΟΚΚΙΝΟ, ΠΡΑΣΙΝΟ, ΜΠΛΕ = 0, 1, 2 χρώμα αντιστοίχισης: θήκη ΚΟΚΚΙΝΟ: εκτύπωση ("Βλέπω κόκκινο!") ΠΡΑΣΙΝΟ: εκτύπωση ("Το γρασίδι είναι πράσινο") θήκη ΜΠΛΕ: εκτύπωση ("Αισθάνομαι τα μπλε :(")

  • Είναι πλέον δυνατή η χρήση παρενθέσεων στη δήλωση with για να χωριστεί ο ορισμός μιας συλλογής διαχειριστών περιβάλλοντος σε πολλές γραμμές. Επιτρέπεται επίσης να αφήνετε κόμμα μετά τον τελικό διαχειριστή περιβάλλοντος στην ομάδα: με ( CtxManager1() ως παράδειγμα1, CtxManager2() ως παράδειγμα2, CtxManager3() ως παράδειγμα3, ): ...
  • Βελτιωμένη αναφορά της θέσης κώδικα των σφαλμάτων που σχετίζονται με μη κλειστές αγκύλες και εισαγωγικά σε κυριολεκτικά συμβολοσειρά. Για παράδειγμα, όταν υπάρχει ένα μη κλειστό στήριγμα, αντί να αναφέρει ένα συντακτικό σφάλμα στην ακόλουθη κατασκευή, ο δείκτης επισημαίνει τώρα την αρχική αγκύλη και υποδεικνύει ότι δεν υπάρχει μπλοκ κλεισίματος. Αρχείο "example.py", γραμμή 1 αναμενόμενη = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^Σφάλμα σύνταξης: '{' δεν έκλεισε ποτέ

    Προστέθηκαν πρόσθετα εξειδικευμένα μηνύματα συντακτικών σφαλμάτων: λείπει το σύμβολο ":" πριν από ένα μπλοκ και στα λεξικά, δεν χωρίζει μια πλειάδα με παρενθέσεις, λείπει κόμμα σε λίστες, καθορίζει ένα μπλοκ "δοκιμάστε" χωρίς "εκτός" και "τελικά", χρησιμοποιώντας "= " αντί για "= =" στις συγκρίσεις, προσδιορίζοντας *-εκφράσεις σε συμβολοσειρές f. Επιπλέον, διασφαλίζει την επισήμανση ολόκληρης της προβληματικής έκφρασης, όχι μόνο της αρχής, και πιο σαφείς πληροφορίες σχετικά με το πλαίσιο των σφαλμάτων που σχετίζονται με εσφαλμένη εσοχή. >>> def foo(): ... αν lel: ... x = 2 Αρχείο " ", γραμμή 3 x = 2 ^ IndentationError: αναμένεται ένα μπλοκ με εσοχή μετά τη δήλωση "if" στη γραμμή 2

    Σε σφάλματα που προκαλούνται από τυπογραφικά λάθη στα ονόματα των χαρακτηριστικών και των ονομάτων μεταβλητών σε μια συνάρτηση, εμφανίζεται μια πρόταση με το σωστό όνομα. >>>collections.namedtoplo Traceback (πιο πρόσφατη κλήση τελευταία): Αρχείο « ", γραμμή 1, μέσα Χαρακτηριστικό Σφάλμα: η ενότητα 'συλλογές' δεν έχει χαρακτηριστικό 'namedtoplo'. Μήπως εννοούσατε: namedtuple;

  • Για εργαλεία εντοπισμού σφαλμάτων και προφίλ, τα συμβάντα παρακολούθησης παρέχονται με τους ακριβείς αριθμούς γραμμών του εκτελεσμένου κώδικα.
  • Προστέθηκε η ρύθμιση sys.flags.warn_default_encoding για την εμφάνιση μιας προειδοποίησης σχετικά με πιθανά σφάλματα που σχετίζονται με το TextIOWrapper και την open() επεξεργασία αρχείων κωδικοποιημένων UTF-8 χωρίς να προσδιορίζεται ρητά η επιλογή «encoding=»utf-8» (η κωδικοποίηση ASCII χρησιμοποιείται από προεπιλογή). Η νέα έκδοση παρέχει επίσης τη δυνατότητα να καθορίσετε μια τιμή "encoding="locale"" για να ορίσετε την κωδικοποίηση με βάση την τρέχουσα τοπική ρύθμιση.
  • Ένας νέος τελεστής προστέθηκε στη μονάδα πληκτρολόγησης, η οποία παρέχει εργαλεία για τον καθορισμό σχολιασμών τύπων, επιτρέποντας τη χρήση της σύνταξης «X | Y" για να επιλέξετε έναν από τους τύπους (τύπος X ή τύπος Y). def square(αριθμός: int | float) -> int | float: αριθμός επιστροφής ** 2 είναι ισοδύναμος με την προηγουμένως υποστηριζόμενη κατασκευή: def square(αριθμός: Union[int, float]) -> Union[int, float]: αριθμός επιστροφής ** 2
  • Ο τελεστής Concatenate και η μεταβλητή ParamSpec έχουν προστεθεί στη μονάδα πληκτρολόγησης, η οποία σας επιτρέπει να μεταβιβάζετε πρόσθετες πληροφορίες για έλεγχο στατικού τύπου όταν χρησιμοποιείτε το Callable. Η μονάδα πληκτρολόγησης προσθέτει επίσης ειδικές τιμές TypeGuard για να σχολιάσει τις λειτουργίες προστασίας τύπου και TypeAlias ​​για να ορίσει ρητά ένα ψευδώνυμο τύπου. StrCache: TypeAlias ​​= 'Cache[str]' # ένα ψευδώνυμο τύπου
  • Η συνάρτηση zip() υλοποιεί μια προαιρετική «αυστηρή» σημαία, η οποία, όταν καθορίζεται, ελέγχει εάν τα ορίσματα που επαναλαμβάνονται έχουν το ίδιο μήκος. >>> λίστα(zip(('a', 'b', 'c'), (1, 2, 3), strict=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (πιο πρόσφατη τελευταία κλήση ): … ValueError: το όρισμα zip() 2 είναι μεγαλύτερο από το όρισμα 1
  • Προτείνονται νέες ενσωματωμένες συναρτήσεις aiter() και anext() με την υλοποίηση ασύγχρονων αναλόγων στις συναρτήσεις iter() και next().
  • Η εργασία των κατασκευαστών str(), bytes() και bytearray() κατά την εργασία με μικρά αντικείμενα έχει επιταχυνθεί κατά 30-40%.
  • Μείωσε τον αριθμό των λειτουργιών εισαγωγής στη λειτουργική μονάδα runpy. Η εντολή "python3 -m module_name" εκτελείται τώρα κατά μέσο όρο 1.4 φορές πιο γρήγορα λόγω της μείωσης των εισαγόμενων λειτουργικών μονάδων από 69 σε 51.
  • Η εντολή LOAD_ATTR χρησιμοποιεί έναν μηχανισμό προσωρινής αποθήκευσης για μεμονωμένους κωδικούς λειτουργίας, ο οποίος επέτρεψε την επιτάχυνση της εργασίας με κανονικά χαρακτηριστικά έως και 36%, και με υποδοχές έως και 44%.
  • Κατά τη δημιουργία της Python με την επιλογή "--enable-optimizations", η λειτουργία "-fno-semantic-interposition" είναι πλέον ενεργοποιημένη, η οποία επιτρέπει την επιτάχυνση του διερμηνέα έως και 30% σε σύγκριση με τη δημιουργία με το "--enable-shared ” επιλογή.
  • Οι λειτουργικές μονάδες hashlib και ssl έχουν προσθέσει υποστήριξη για το OpenSSL 3.0.0 και σταμάτησαν να υποστηρίζουν εκδόσεις OpenSSL παλαιότερες από 1.1.1.
  • Ο παλιός αναλυτής έχει αφαιρεθεί, ο οποίος αντικαταστάθηκε στον προηγούμενο κλάδο από τον αναλυτή PEG (Parsing Expression Grammar). Η μονάδα μορφοποιητή έχει αφαιρεθεί. Η παράμετρος βρόχου έχει αφαιρεθεί από το asyncio API. Οι μέθοδοι που είχαν καταργηθεί στο παρελθόν έχουν καταργηθεί. Οι συναρτήσεις Py_UNICODE_str* που χειρίζονται τις συμβολοσειρές Py_UNICODE* έχουν αφαιρεθεί.
  • Η λειτουργική μονάδα distutils έχει καταργηθεί και έχει προγραμματιστεί για κατάργηση στην Python 3.12. Αντί για ditutils, συνιστάται η χρήση των μονάδων setuptools, packaging, platform, shutil, subprocess και sysconfig. Η δομή wstr στο PyUnicodeObject έχει καταργηθεί και έχει προγραμματιστεί για κατάργηση.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο