Programmering

4 Python-type brikker for å holde koden ren

I begynnelsen hadde Python ingen typepynt. Det passer med det overordnede målet om å gjøre språket raskt og enkelt å jobbe med, med fleksible objekttyper som passer til vridningene ved å skrive kode og hjelper utviklere å holde koden kortfattet.

I løpet av de siste årene har Python imidlertid lagt til støtte for typekommentarer, og inspirert til en hel programvarekultur viet til typekontroll av Python under utviklingen. Python sjekker ikke typer på kjøretid - i det minste ikke ennå. Men ved å dra nytte av en god type kontroller, kjøre hagle med deg i din IDE du velger, kan du bruke Pythons typekommentarer til å skjerme ut mange vanlige feil før de treffer produksjonen.

I denne artikkelen vil vi fordype oss i fire av hovedtypekontrolltilleggene for Python. Alle følger omtrent det samme mønsteret, skanner Python-kode med typekommentarer og gir tilbakemelding. Men hver og en tilbyr sine egne nyttige tillegg til grunnkonseptet.

Mypy

Mypy var uten tvil det første statiske typen kontrollsystem for Python, ettersom arbeidet med det startet i 2012, og det er fortsatt under aktiv utvikling. Det er egentlig prototypen for hvordan tredjeparts typekontrollbiblioteker fungerer i Python, selv om mange andre har kommet sammen siden og utvidet funksjonene.

Mypy kan kjøre frittstående eller fra kommandolinjen, eller det kan fungere som en del av en redaktør eller IDEs linterintegrasjon. Mange redaktører og IDEer integrerer Mypy; Visual Studio Code's Python-utvidelse kan fungere direkte med den. Når den kjøres, genererer Mypy rapporter om kodens konsistens basert på typen informasjon den gir.

Hvis koden din ikke inneholder typekommentarer, utfører ikke Mypy de aller fleste kodekontrollene. Du kan imidlertid bruke Mypy til å flagge ikke-merket kode. Dette kan gjøres med varierende grad av strenghet avhengig av ens behov.

Hvis du starter fra bunnen av med en kodebase og vil ha en preemptively aggressiv linting-strategi, kan du bruke --streng alternativet for å forhindre uteskrevet kode. På den annen side, hvis du jobber med en eldre kodebase som ikke har mange typedefinisjoner, kan du bruke mer avslappede alternativer, som for eksempel å forhindre bare utypede funksjonsdefinisjoner med--disallow-untyped-defs mens du tillater annen untyped kode. Og du kan alltid bruke innebygde kommentarer som # type: ignorere for å hindre at enkelte linjer blir flagget.

Mypy kan benytte seg av PEP 484 stubfiler når du vil bruke typetips for en moduls offentlige grensesnitt. På toppen av dette tilbyr Mypy stubgen, et verktøy som automatisk genererer stub-filer fra eksisterende kode. For utypet kode bruker stub-filene generiske typer, som du deretter kan merke etter behov.

Pytype

Pytype, opprettet av Google, skiller seg fra slike som Mypy ved å bruke slutning i stedet for bare skrivebeskrivere. Med andre ord, Pytype prøver å bestemme typer ved å analysere kodestrømmen, i stedet for å stole strengt på typekommentarer.

Pytype tar feil på siden av mildhet når det er fornuftig å gjøre det. Hvis du har en operasjon som fungerer i løpetid og ikke motsier noen kommentarer, vil ikke Pytype knirke om det. Dette betyr imidlertid at noen problemer som skal flagges (for eksempel å erklære en variabel med en type på et punkt og deretter omdefinere den i samme sammenheng) går forbi uanmeldt. Dokumentasjonen sier at slike ting vil bli tillatt på et eller annet tidspunkt i fremtiden.

Hvis du velger å legge til typekommentarer i koden din, så er Pytypeavsløre_type funksjonen er spesielt nyttig. Hvis du setter inn en uttalelse i koden din som leser avsløre_type (expr), Vurderer Pytype ekspr og sender et varsel som beskriver typen.

Merk at visse Pytype-atferd kontrolleres ved å legge til attributter til selve koden. Hvis du for eksempel vil stoppe Pytype fra å klage på manglende attributter eller modulmedlemmer som er angitt dynamisk, må du legge til attributtet _HAS_DYNAMIC_ATTRIBUTES = Sant til klassen eller modulen det er snakk om, i motsetning til å angi en slags Pytype-konfigurasjonsmetadata.

Copyright / Pylance

P copyright er Microsofts Python-type kontroller, inkludert som en del av Pylance-utvidelsen for Visual Studio Code. Hvis du allerede er bruker av VS-kode, er Pylance-utvidelsen den mest praktiske måten å jobbe med P copyright på. bare installer den og gå. P copyright gir en god alt-i-ett-type kontroll og kode linting opplevelse, med mange av de samme bekvemmelighetene og fremskrittene som tidligere Python analyseverktøy.

I likhet med Pytype, kan Copyright arbeide med kodebaser som ikke har noen typeinformasjon. I slike tilfeller vil Copyright gjøre sitt beste for å utlede hvilke typer som spilles. Dermed kan du fremdeles få gode resultater med Pytype på eldre kodebaser uten typedeklarasjoner. Men du får bedre resultater over tid når du gradvis legger til typekommentarer i koden din.

Copyright er veldig fleksibelt på måter som utfyller utformingen av virkelige Python-prosjekter. Som med andre typer kontrollører, kan Copyright konfigureres per prosjektbasis med en JSON-formatert konfigurasjonsfil i prosjektets katalog. Individuelle baner kan ekskluderes (aldri sjekkes) eller ignoreres (feil og advarsler undertrykkes) i konfigurasjonsfilen, og alternativene er svært detaljerte.

I VS Code kan arbeidsområder med flere røtter hver ha sin egen Copyright-konfigurasjon, i tilfelle forskjellige deler av prosjektet trenger forskjellige linting-konfigurasjoner. På samme måte kan du definere flere "utførelsesmiljøer" i et prosjekt, hver med sine egne venv- eller importbaner.

Bål

Pyre er laget av utviklere på Facebook og Instagram, og er faktisk to verktøy i ett: en typekontroll (Pyre) og et statisk kodeanalyseverktøy (Pysa). De to er designet for å fungere hånd i hånd for å gi et høyere nivå av kontroll og analyse enn andre verktøy, selv om brukeren trenger å gjøre litt tunge løft for å dra full nytte av dem.

Pyre tar en tilnærming som ligner på Pytype og Mypy. Utypet kode håndteres mildere enn tastet kode, slik at du kan begynne med en utypet Python-kodebase og legge til kommentarfunksjon etter funksjon og modul for modul. Slå på “streng modus” i en modul, så rapporterer Pyre eventuelle manglende kommentarer. Eller du kan gjøre streng modus som standard og velge bort på modulnivå. Pyre vil også jobbe med .pyi-format stubfiler.

Pyre har en kraftig funksjon for å migrere kodebaser til et skrevet format. De slutte kommandolinjealternativet inntar en fil eller katalog, gir utdannede gjetninger om typene som brukes, og bruker merknadene på filene. Du må først ta sikkerhetskopier av koden din! (Hvis du ønsker å få informasjon om typen fra en løping Python-program, du kan gjøre det med et annet Facebook / Instagram-prosjekt, MonkeyType.)

Mens Pyres funksjoner gjenspeiler de andre pakkene som er beskrevet her, er Pysa unik. Pysa utfører "taint analyse" på kode for å identifisere potensielle sikkerhetsproblemer, avhengig av et bibliotek med strømningsanalyser for visse programvarekomponenter og flaggkoder som ser ut til å være sårbare. Alt som berøres av denne koden vil også bli markert som smittet, selv om du kan spesifisere komponenter som renser data og fjerner dataene fra malingsgrafen.

En ulempe er at Pysas bibliotek med tredjepartsanalyser av komponenter er fortsatt lite, så det kan hende du må lage din egen modell. Men mange av de små analysene er for programvare som er mye brukt, for eksempel Django web framework, SQL Alchemy ORM og Pandas data science-biblioteket, for ikke å nevne analyser for vanlige filsystemproblemer.

Hvordan gjøre mer med Python

  • Hvordan jobbe med Python-datatypen
  • Hvordan pakke Python-apper med BeeWare koffert
  • Hvordan kjøre Anaconda side om side med andre pythoner
  • Hvordan bruke Python dataklasser
  • Kom i gang med asynkronisering i Python
  • Hvordan bruke asyncio i Python
  • 3 trinn til en Python async-overhaling
  • Hvordan bruke PyInstaller for å lage Python-kjørbare filer
  • Cython tutorial: Hvordan øke hastigheten på Python
  • Slik installerer du Python på den smarte måten
  • Hvordan håndtere Python-prosjekter med poesi
  • Hvordan administrere Python-prosjekter med Pipenv
  • Virtualenv og venv: Python virtuelle miljøer forklart
  • Python virtualenv og venv do’s and don'ts
  • Python-tråder og underprosesser forklart
  • Hvordan bruke Python-feilsøkingsprogrammet
  • Hvordan bruke timeit til å profilere Python-kode
  • Hvordan bruke cProfile for å profilere Python-kode
  • Slik konverterer du Python til JavaScript (og tilbake igjen)
$config[zx-auto] not found$config[zx-overlay] not found