Προγραμματισμός

4 πούλια τύπου Python για να διατηρήσετε τον κωδικό σας καθαρό

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

Τα τελευταία χρόνια, ωστόσο, η Python πρόσθεσε υποστήριξη για σχολιασμούς τύπου, εμπνέοντας μια ολόκληρη κουλτούρα λογισμικού αφιερωμένη στον έλεγχο τύπου Python κατά τη διάρκεια της ανάπτυξης. Η Python δεν ελέγχει τους τύπους κατά το χρόνο εκτέλεσης - τουλάχιστον, όχι ακόμα. Όμως, εκμεταλλευόμενος έναν καλό ελεγκτή τύπου, οδηγώντας το όπλο μαζί σας στο IDE της επιλογής σας, μπορείτε να χρησιμοποιήσετε τους σχολιασμούς τύπου της Python για να προβάλετε πολλά κοινά λάθη πριν χτυπήσουν την παραγωγή.

Σε αυτό το άρθρο θα εξετάσουμε τέσσερα από τα κύρια πρόσθετα ελέγχου τύπου για το Python. Όλοι ακολουθούν περίπου το ίδιο μοτίβο, σάρωση κώδικα Python με σχολιασμούς τύπου και παροχή σχολίων. Αλλά ο καθένας προσφέρει τις δικές του χρήσιμες προσθήκες στη βασική ιδέα.

Mypy

Η Mypy ήταν αναμφισβήτητα το πρώτο σύστημα ελέγχου στατικού τύπου για την Python, καθώς ξεκίνησαν οι εργασίες για το 2012 και είναι ακόμη υπό ανάπτυξη. Είναι ουσιαστικά το πρωτότυπο για το πώς λειτουργούν οι βιβλιοθήκες ελέγχου τρίτων μερών στο Python, ακόμα κι αν πολλές άλλες έχουν συνεργαστεί από τότε και έχουν επεκταθεί στις δυνατότητές της.

Το Mypy μπορεί να εκτελεστεί αυτόνομο, ή από τη γραμμή εντολών ή μπορεί να λειτουργήσει ως μέρος ενός προγράμματος επεξεργασίας ή ενοποίησης linter του IDE. Πολλοί συντάκτες και IDE ενσωματώνουν το Mypy. Η επέκταση Python του Visual Studio Code μπορεί να λειτουργήσει απευθείας με αυτήν. Όταν εκτελείται, το Mypy δημιουργεί αναφορές σχετικά με τη συνέπεια του κώδικα σας με βάση τον τύπο πληροφοριών που παρέχει.

Εάν ο κώδικάς σας δεν περιλαμβάνει σχολιασμούς τύπου, η Mypy δεν θα εκτελέσει τη συντριπτική πλειοψηφία των ελέγχων κώδικα. Ωστόσο, μπορείτε να χρησιμοποιήσετε το Mypy για να επισημάνετε τον μη σχολιασμένο κωδικό. Αυτό μπορεί να γίνει με διάφορους βαθμούς αυστηρότητας ανάλογα με τις ανάγκες κάποιου.

Εάν ξεκινάτε από το μηδέν με μια βάση κώδικα και θέλετε μια προληπτικά επιθετική στρατηγική χνούδι, μπορείτε να χρησιμοποιήσετε το --αυστηρός επιλογή για την αποφυγή τυχόν άτυπου κώδικα. Από την άλλη πλευρά, εάν εργάζεστε με μια παλιά βάση κώδικα που δεν έχει πολλούς ορισμούς τύπων, μπορείτε να χρησιμοποιήσετε πιο χαλαρές επιλογές, όπως η αποτροπή μόνο ορισμών λειτουργιών που δεν έχουν πληκτρολογηθεί- απορρίψτε-άτυπες-def επιτρέποντας άλλον μη τυποποιημένο κώδικα. Και μπορείτε πάντα να χρησιμοποιείτε ενσωματωμένα σχόλια όπως # type: αγνοήστε για να μην επισημανθούν μεμονωμένες γραμμές.

Το Mypy μπορεί να χρησιμοποιήσει αρχεία stub PEP 484 όταν θέλετε να χρησιμοποιήσετε υποδείξεις τύπου για τις δημόσιες διεπαφές μιας μονάδας. Επιπλέον, η Mypy προσφέρει πεισματάρης, ένα εργαλείο που δημιουργεί αυτόματα αρχεία stub από τον υπάρχοντα κώδικα. Για τον μη τυποποιημένο κώδικα, τα αρχεία stub χρησιμοποιούν γενικούς τύπους, τους οποίους μπορείτε στη συνέχεια να επισημάνετε όπως απαιτείται.

Pytype

Το Pytype, που δημιουργήθηκε από την Google, διαφέρει από τους τύπους του Mypy στη χρήση συμπερασμάτων αντί για περιγραφικούς τύπους. Με άλλα λόγια, το Pytype προσπαθεί να προσδιορίσει τους τύπους αναλύοντας τη ροή κώδικα, αντί να βασίζεται αυστηρά σε σχολιασμούς τύπου.

Ο τύπος σφάλματος από την πλευρά της επιείκειας όποτε έχει νόημα να το κάνει. Εάν έχετε μια λειτουργία που λειτουργεί κατά το χρόνο εκτέλεσης και δεν έρχεται σε αντίθεση με τυχόν σχολιασμούς, το Pytype δεν θα αμφισβητήσει. Ωστόσο, αυτό σημαίνει ότι ορισμένα προβλήματα που πρέπει να επισημανθούν (π.χ., η δήλωση μιας μεταβλητής με έναν τύπο σε ένα σημείο και στη συνέχεια ο επαναπροσδιορισμός της στο ίδιο πλαίσιο) περνούν χωρίς προειδοποίηση. Η τεκμηρίωση αναφέρει ότι τέτοια πράγματα θα απαγορεύονται κάποια στιγμή στο μέλλον.

Εάν επιλέξετε να προσθέσετε σχολιασμούς τύπου στον κώδικά σας, τότε το Pytype'sτύπος αποκάλυψης Η λειτουργία είναι ιδιαίτερα βολική. Εάν εισαγάγετε μια δήλωση στον κωδικό σας που διαβάζει τύπος αποκάλυψης (expr), Αξιολογεί το Pytype π.χ. και εκπέμπει μια ειδοποίηση που περιγράφει τον τύπο της.

Σημειώστε ότι ορισμένες συμπεριφορές Pytype ελέγχονται προσθέτοντας χαρακτηριστικά στον ίδιο τον κώδικα. Για παράδειγμα, εάν θέλετε να σταματήσετε το Pytype να παραπονιέται για τα χαρακτηριστικά που λείπουν ή τα μέλη της λειτουργικής μονάδας που έχουν ρυθμιστεί δυναμικά, πρέπει να προσθέσετε το χαρακτηριστικό _HAS_DYNAMIC_ATTRIBUTES = True στην εν λόγω τάξη ή ενότητα, σε αντίθεση με τον ορισμό κάποιου είδους μεταδεδομένων διαμόρφωσης Pytype.

Pyright / Pylance

Το Pyright είναι ελεγκτής τύπου Microsoft Python, που περιλαμβάνεται ως μέρος της επέκτασης Pylance για Visual Studio Code. Εάν είστε ήδη χρήστης του Κώδικα VS, η επέκταση Pylance είναι ο πιο βολικός τρόπος για να εργαστείτε με την Pyright. απλώς εγκαταστήστε το και φύγετε. Η Pyright παρέχει μια καλή εμπειρία ελέγχου τύπου και κωδικοποίησης κώδικα all-in-one, με πολλές από τις ίδιες ανέσεις και προόδους με τα προηγούμενα εργαλεία ανάλυσης Python.

Όπως και το Pytype, το Pyright μπορεί να λειτουργήσει με βάσεις κώδικα που δεν έχουν πληροφορίες για τον τύπο. Σε αυτές τις περιπτώσεις, η Pyright θα καταβάλει κάθε δυνατή προσπάθεια για να συμπεράνει ποιοι τύποι παίζονται. Έτσι μπορείτε να έχετε καλά αποτελέσματα με το Pytype σε παλαιότερες βάσεις κώδικα χωρίς δηλώσεις τύπου. Ωστόσο, θα έχετε καλύτερα αποτελέσματα με την πάροδο του χρόνου καθώς προσθέτετε σταδιακά τους σχολιασμούς τύπου στον κώδικά σας.

Η Pyright είναι εξαιρετικά ευέλικτη με τρόπους που συμπληρώνουν τα σχέδια πραγματικών έργων Python. Όπως και με άλλους ελεγκτές τύπου, το Pyright μπορεί να ρυθμιστεί σε κάθε έργο με ένα αρχείο διαμόρφωσης με μορφή JSON στον κατάλογο του έργου. Μεμονωμένες διαδρομές μπορούν να αποκλειστούν (να μην ελεγχθούν ποτέ) ή να αγνοηθούν (καταργούνται σφάλματα και προειδοποιήσεις) στο αρχείο διαμόρφωσης και οι επιλογές είναι εξαιρετικά λεπτομερείς.

Στον κώδικα VS, οι χώροι εργασίας με πολλές ρίζες μπορούν ο καθένας να έχει τη δική του διαμόρφωση Pyright, σε περίπτωση που διαφορετικά μέρη του έργου χρειάζονται διαφορετικές διαμορφώσεις χνούδι. Στο ίδιο πνεύμα, μπορείτε να ορίσετε πολλά "περιβάλλοντα εκτέλεσης" μέσα σε ένα έργο, το καθένα με το δικό του venv ή διαδρομές εισαγωγής.

Πυρά

Δημιουργήθηκε από προγραμματιστές στο Facebook και το Instagram, το Pyre είναι στην πραγματικότητα δύο εργαλεία σε ένα: ένα εργαλείο ελέγχου τύπου (Pyre) και ένα εργαλείο ανάλυσης στατικού κώδικα (Pysa). Τα δύο έχουν σχεδιαστεί για να λειτουργούν χέρι-χέρι για να παρέχουν υψηλότερο επίπεδο ελέγχου και ανάλυσης από άλλα εργαλεία, αν και ο χρήστης πρέπει να κάνει λίγη βαριά ανύψωση για να τα εκμεταλλευτεί πλήρως.

Η Pyre ακολουθεί μια προσέγγιση παρόμοια με το Pytype και το Mypy. Ο μη τυποποιημένος κώδικας αντιμετωπίζεται πιο επιεικώς από τον κωδικό που έχει πληκτρολογηθεί, οπότε μπορείτε να ξεκινήσετε με μια μη πληκτρολογημένη βάση κώδικα Python και να προσθέσετε συνάρτηση σχολιασμών ανά λειτουργία και ενότητα ανά ενότητα. Εναλλαγή σε "αυστηρή λειτουργία" σε μια ενότητα και η Pyre θα επισημάνει τυχόν σχολιασμούς που λείπουν. Ή θα μπορούσατε να ορίσετε την αυστηρή λειτουργία ως προεπιλογή και να εξαιρεθείτε σε επίπεδο ενότητας. Η Pyre θα λειτουργεί επίσης με αρχεία stub με μορφή .pyi.

Το Pyre διαθέτει ένα ισχυρό χαρακτηριστικό για τη μετεγκατάσταση των βάσεων κώδικα σε μια πληκτρολογημένη μορφή. ο συμπεραίνω Η επιλογή γραμμής εντολών απορροφά ένα αρχείο ή έναν κατάλογο, πραγματοποιεί εικασίες για τους τύπους που χρησιμοποιούνται και εφαρμόζει τους σχολιασμούς στα αρχεία. Ωστόσο, θα θελήσετε να δημιουργήσετε αντίγραφα ασφαλείας του κώδικα σας! (Εάν θέλετε να λάβετε πληροφορίες τύπου από το a τρέξιμο Το πρόγραμμα Python, μπορείτε να το κάνετε με ένα άλλο έργο Facebook / Instagram, το MonkeyType.)

Ενώ οι δυνατότητες της Pyre αντικατοπτρίζουν αυτές των άλλων πακέτων που περιγράφονται εδώ, η Pysa είναι μοναδική. Η Pysa εκτελεί "taint analysis" σε κώδικα για να εντοπίσει πιθανά ζητήματα ασφαλείας, στηριζόμενη σε μια βιβλιοθήκη αναλύσεων ροής για ορισμένα στοιχεία λογισμικού και κώδικα επισήμανσης που φαίνεται να είναι ευάλωτο. Οτιδήποτε αγγίζεται από αυτόν τον κωδικό θα επισημανθεί επίσης ως μολυσμένο, αν και μπορείτε να καθορίσετε στοιχεία που απολυμαίνουν τα δεδομένα και να αφαιρέσετε αυτά τα δεδομένα από το γράφημα βαφής.

Ένα μειονέκτημα είναι ότι η βιβλιοθήκη τρίτων μερών της Pysa αναλύσεων χρωμάτων είναι ακόμα μικρή, οπότε ίσως χρειαστεί να σχεδιάσετε το δικό σας μοντέλο. Ωστόσο, πολλές από τις ανακριτικές αναλύσεις αφορούν λογισμικό που χρησιμοποιείται ευρέως, όπως το πλαίσιο ιστού Django, το SQL Alchemy ORM και η βιβλιοθήκη επιστημών δεδομένων Pandas, για να μην αναφέρουμε αναλύσεις για κοινά ζητήματα συστήματος αρχείων.

Πώς να κάνετε περισσότερα με την Python

  • Πώς να εργαστείτε με τον τύπο δεδομένων λίστας Python
  • Τρόπος συσκευασίας εφαρμογών Python με BeeWare Briefcase
  • Πώς να τρέξετε το Anaconda δίπλα-δίπλα με άλλους Pythons
  • Πώς να χρησιμοποιήσετε γυαλιά ηλίου Python
  • Ξεκινήστε με το async στο Python
  • Πώς να χρησιμοποιήσετε το asyncio στο Python
  • 3 βήματα για μια αναθεώρηση ασύγχρονου Python
  • Πώς να χρησιμοποιήσετε το PyInstaller για να δημιουργήσετε εκτελέσιμα Python
  • Εκμάθηση Cython: Πώς να επιταχύνετε το Python
  • Πώς να εγκαταστήσετε το Python με τον έξυπνο τρόπο
  • Πώς να διαχειριστείτε τα έργα Python με το Poetry
  • Πώς να διαχειριστείτε τα έργα Python με το Pipenv
  • Virtualenv και venv: Εξηγήθηκαν εικονικά περιβάλλοντα Python
  • Το Python virtualenv και το venv κάνουν και δεν πρέπει
  • Η εξήγηση και οι υποεπεξεργασίες Python εξηγούνται
  • Πώς να χρησιμοποιήσετε το πρόγραμμα εντοπισμού σφαλμάτων Python
  • Πώς να χρησιμοποιήσετε το χρονοδιάγραμμα για τον προφίλ κώδικα Python
  • Πώς να χρησιμοποιήσετε το cProfile για να προβάλετε τον κώδικα Python
  • Πώς να μετατρέψετε το Python σε JavaScript (και να επιστρέψετε ξανά)
$config[zx-auto] not found$config[zx-overlay] not found