Programmering

4 Python-type brikker for at holde din kode ren

I begyndelsen havde Python ingen typedekorationer. Det passer med det overordnede mål om at gøre sproget hurtigt og nemt at arbejde med, med fleksible objekttyper, der imødekommer vendingerne ved at skrive kode og hjælper udviklere med at holde deres kode kortfattet.

I løbet af de sidste par år har Python dog tilføjet understøttelse af typebemærkninger, hvilket inspirerer en hel kultur af software, der er afsat til typekontrol af Python under udvikling. Python kontrollerer ikke typer ved runtime - i det mindste endnu ikke. Men ved at udnytte en god type checker, køre haglgevær med dig i din IDE efter eget valg, kan du bruge Pythons typebetegnelser til at screene mange almindelige fejl, inden de rammer produktionen.

I denne artikel vil vi dykke ind i fire af de største tilføjelser til typekontrol af Python. Alle følger omtrent det samme mønster, scanner Python-kode med typebemærkninger og giver feedback. Men hver enkelt tilbyder sine egne nyttige tilføjelser til det grundlæggende koncept.

Mypy

Mypy var uden tvivl det første statiske type kontrolsystem for Python, da arbejdet med det begyndte i 2012, og det er stadig under aktiv udvikling. Det er i det væsentlige prototypen for, hvordan tredjeparts typekontrolbiblioteker fungerer i Python, selvom mange andre er kommet siden og udvidet med dets funktioner.

Mypy kan køre enkeltstående eller fra kommandolinjen, eller det kan fungere som en del af en editor eller IDEs linterintegration. Mange redaktører og IDE'er integrerer Mypy; Visual Studio Code's Python-udvidelse kan arbejde direkte med det. Når det køres, genererer Mypy rapporter om din kodes konsistens baseret på de typeoplysninger, den giver.

Hvis din kode ikke indeholder typeannoteringer, udfører Mypy ikke langt størstedelen af ​​sine kodekontrol. Du kan dog bruge Mypy til at markere ikke-kommenteret kode. Dette kan gøres med varierende grad af strenghed afhængigt af ens behov.

Hvis du starter fra bunden med en codebase, og du vil have en forebyggende aggressiv fnugstrategi, kan du bruge --streng mulighed for at forhindre enhver kode, der ikke er skrevet. På den anden side, hvis du arbejder med en ældre kodebase, der ikke har mange typedefinitioner, kan du bruge mere afslappede indstillinger, som f.eks. At forhindre utypede funktionsdefinitioner med--disallow-untyped-defs samtidig med at du tillader anden utypet kode. Og du kan altid bruge integrerede kommentarer som # type: ignorere for at forhindre, at enkelte linjer markeres.

Mypy kan gøre brug af PEP 484-stubfiler, når du vil bruge typetips til et moduls offentlige grænseflader. Oven i dette tilbyder Mypy stubgen, et værktøj, der automatisk genererer stubfiler fra eksisterende kode. For ikke-skrevet kode bruger stub-filerne generiske typer, som du derefter kan markere efter behov.

Pytype

Pytype, oprettet af Google, adskiller sig fra folk som Mypy ved at bruge slutning i stedet for bare skrivebeskrivere. Med andre ord forsøger Pytype at bestemme typer ved at analysere kodeflow snarere end at stole på typebemærkninger.

Pytype fejler på siden af ​​lempelse, når det giver mening at gøre det. Hvis du har en operation, der fungerer i løbetid og ikke modsiger nogen kommentarer, vil Pytype ikke squawke om det. Dette betyder dog, at nogle problemer, der skal markeres (f.eks. At erklære en variabel med en type på et tidspunkt og derefter omdefinere den i samme sammenhæng) passerer uanmeldt. Dokumentationen siger, at sådanne ting vil blive tilladt på et eller andet tidspunkt i fremtiden.

Hvis du vælger at tilføje typebetegnelser til din kode, så er Pytypeafsløre_type funktion er særlig praktisk. Hvis du indsætter en erklæring i din kode, der læser afsløre_type (expr), Vurderer Pytype ekspr og udsender en alarm, der beskriver dens type.

Bemærk, at visse Pytype-adfærd styres ved at tilføje attributter til selve koden. For eksempel, hvis du vil forhindre Pytype i at klage over manglende attributter eller modulmedlemmer, der er indstillet dynamisk, skal du tilføje attributten _HAS_DYNAMIC_ATTRIBUTES = Sandt til den pågældende klasse eller modul i modsætning til at indstille en slags Pytype-konfigurationsmetadata.

Ophavsret / Pylance

P copyright er Microsofts Python-type kontrol, inkluderet som en del af Pylance-udvidelsen til Visual Studio Code. Hvis du allerede er VS-kode-bruger, er Pylance-udvidelsen den mest bekvemme måde at arbejde med P copyright på; bare installer det og gå. P copyright giver en god alt-i-en type kontrol og kode linting oplevelse med mange af de samme bekvemmeligheder og fremskridt som tidligere Python analyseværktøjer.

Ligesom Pytype kan P copyright arbejde med kodebaser, der ikke har nogen typeoplysninger. I disse tilfælde vil P Copyright gøre sit bedste for at udlede, hvilke typer der er i spil. Således kan du stadig få gode resultater med Pytype på ældre kodebaser uden typedeklarationer. Men du får bedre resultater over tid, når du gradvist føjer typebemærkninger til din kode.

Copyright er meget fleksibelt på måder, der supplerer designet af Python-projekter i den virkelige verden. Som med andre typekontroller kan Copyright oprettes pr. Projektbasis med en JSON-formateret konfigurationsfil i projektets katalog. Individuelle stier kan udelukkes (aldrig kontrolleres) eller ignoreres (fejl og advarsler undertrykkes) i konfigurationsfilen, og indstillingerne er meget detaljerede.

I VS-kode kan arbejdsområder med flere rødder hver have deres egen Copyright-konfiguration, hvis forskellige dele af projektet har brug for forskellige linting-konfigurationer. På samme måde kan du definere flere "eksekveringsmiljøer" inden for et projekt, hver med sin egen venv eller importstier.

Bål

Oprettet af udviklere på Facebook og Instagram er Pyre faktisk to værktøjer i ét: en typekontrol (Pyre) og et statisk kodeanalyseværktøj (Pysa). De to er designet til at fungere hånd i hånd for at give et højere niveau af kontrol og analyse end andre værktøjer, selvom brugeren skal gøre lidt tunge løft for at drage fuld fordel af dem.

Pyre tager en tilgang svarende til Pytype og Mypy. Untyped kode håndteres lettere end indtastet kode, så du kan begynde med en utypet Python-codebase og tilføje kommentarfunktion efter funktion og modul for modul. Skift til "streng tilstand" i et modul, og Pyre markerer eventuelle manglende kommentarer. Eller du kan gøre streng tilstand til standard og fravælge på modulniveau. Pyre vil også arbejde med .pyi-format stubfiler.

Pyre har en kraftfuld funktion til at migrere codebases til et indtastet format. Det udlede kommandolinjemulighed indtager en fil eller et bibliotek, giver veluddannede gæt om de anvendte typer og anvender kommentarerne på filerne. Du vil dog gerne tage sikkerhedskopier af din kode! (Hvis du vil hente typeoplysninger fra en kører Python-program, du kan gøre det med et andet Facebook / Instagram-projekt, MonkeyType.)

Mens Pyres funktioner gentager dem fra de andre pakker, der er beskrevet her, er Pysa unik. Pysa udfører "taint analyse" på kode for at identificere potentielle sikkerhedsproblemer og stoler på et bibliotek med flowanalyser til bestemte softwarekomponenter og markeringskode, der synes at være sårbar. Alt, der berøres af denne kode, markeres også som plettet, selvom du kan specificere komponenter, der renser data og fjerner disse data fra pletten.

En ulempe er, at Pysas bibliotek med tredjeparts-komponent-pletteanalyser stadig er lille, så du skal muligvis udtænke din egen model. Men mange af de beskadigede analyser er til software, der er meget udbredt, såsom Django web framework, SQL Alchemy ORM og Pandas datalogibibliotek, for ikke at nævne analyser til almindelige filsystemproblemer.

Sådan gør du mere med Python

  • Sådan arbejder du med Python-datatypen
  • Sådan pakkes Python-apps med BeeWare Rejsetaske
  • Sådan køres Anaconda side om side med andre pythoner
  • Sådan bruges Python-dataglas
  • Kom godt i gang med async i Python
  • Sådan bruges asyncio i Python
  • 3 trin til en Python async-eftersyn
  • Sådan bruges PyInstaller til at oprette Python-eksekverbare filer
  • Cython tutorial: Sådan fremskyndes Python
  • Sådan installeres Python på den smarte måde
  • Sådan styres Python-projekter med Poetry
  • Sådan styres Python-projekter med Pipenv
  • Virtualenv og venv: Python virtuelle miljøer forklaret
  • Python virtualenv og venv do's and don'ts
  • Python-gevind og underprocesser forklaret
  • Sådan bruges Python debugger
  • Sådan bruges timeit til at profilere Python-kode
  • Sådan bruges cProfile til profilering af Python-kode
  • Sådan konverteres Python til JavaScript (og tilbage igen)