Programmēšana

4 Python tipa pārbaudītāji, lai jūsu kods būtu tīrs

Sākumā Python nebija tipa rotājumu. Tas atbilst vispārējam mērķim padarīt valodu ātru un ērti lietojamu, ar elastīgiem objektu tipiem, kas atbilst koda rakstīšanas līkločiem un palīdz izstrādātājiem koda kodolīgumu.

Tomēr pēdējo gadu laikā Python ir pievienojis atbalstu tipu anotācijām, iedvesmojot veselu programmatūras kultūru, kas veltīta Python tipa pārbaudei izstrādes laikā. Python nepārbauda veidus izpildes laikā - vismaz pagaidām. Bet, izmantojot laba tipa pārbaudītāju, braucot ar ieročiem ar jums savā izvēlētajā IDE, varat izmantot Python tipa anotācijas, lai pārbaudītu daudzas izplatītākās kļūdas, pirms tās nonāk ražošanā.

Šajā rakstā mēs iedziļināsimies četros galvenajos Python tipa pārbaudes papildinājumos. Visi izmanto apmēram to pašu modeli, skenējot Python kodu ar tipa anotācijām un sniedzot atsauksmes. Bet katrs piedāvā savus noderīgos pamatkoncepcijas papildinājumus.

Mypy

Mypy neapšaubāmi bija pirmā Python statiskā tipa pārbaudes sistēma, jo darbs pie tā sākās 2012. gadā, un tā joprojām tiek aktīvi izstrādāta. Būtībā tas ir prototips, kā Python darbojas trešo pušu tipa bibliotēkas, pat ja kopš tā laika daudzi citi ir ieradušies un paplašinājuši tā funkcijas.

Mypy var palaist atsevišķi vai no komandrindas, vai arī tas var darboties kā daļa no redaktora vai IDE interfeisa integrācijas. Daudzi redaktori un IDE integrē Mypy; Visual Studio Code Python paplašinājums var tieši darboties ar to. Pēc palaišanas Mypy ģenerē pārskatus par jūsu koda konsekvenci, pamatojoties uz tā sniegto informāciju par tipu.

Ja jūsu kodā nav ietverta tipa piezīmes, Mypy neveiks lielāko daļu savu kodu pārbaužu. Tomēr jūs varat izmantot Mypy, lai atzīmētu nepaziņotu kodu. To var izdarīt ar dažādu stingrības pakāpi atkarībā no cilvēka vajadzībām.

Ja sākat no nulles ar koda bāzi un vēlaties preventīvi agresīvu savārstīšanas stratēģiju, varat izmantot --stingrs iespēja novērst jebkādu netipētu kodu. No otras puses, ja jūs strādājat ar mantotu koda bāzi, kurai nav daudz veidu definīciju, varat izmantot atvieglinātas opcijas, piemēram, novērst tikai netipētās funkciju definīcijas ar--dolow-untyped-defs vienlaikus atļaujot citu neievadītu kodu. Un jūs vienmēr varat izmantot tādus komentārus kā # type: ignorēt lai atsevišķas līnijas netiktu atzīmētas.

Mypy var izmantot PEP 484 stumbra failus, ja vēlaties izmantot tipa padomus moduļa publiskajām saskarnēm. Papildus tam Mypy piedāvā stūrgalvīgs, rīks, kas automātiski ģenerē failus no esošā koda. Netipētajam kodam failos tiek izmantoti vispārīgi veidi, kurus pēc tam varat atzīmēt pēc nepieciešamības.

Pitips

Google izveidotais piksejs atšķiras no tādiem kā Mypy, izmantojot secinājumus, nevis tikai tipu aprakstus. Citiem vārdiem sakot, Pytype mēģina noteikt tipus, analizējot kodu plūsmu, nevis stingri paļaujoties uz tipa anotācijām.

Pytype kļūdās iecietības pusē ikreiz, kad ir jēga to darīt. Ja jums ir operācija, kas darbojas izpildlaikā un nav pretrunā nevienai anotācijai, Pytype par to nečīkstēs. Tomēr tas nozīmē, ka dažas problēmas, kuras būtu jāatzīmē (piemēram, mainīgā mainīšana ar tipu vienā punktā un pēc tam tā pārdefinēšana tajā pašā kontekstā) paiet garām nepieteikti. Dokumentācijā teikts, ka šādas lietas kādā brīdī nākotnē tiks aizliegtas.

Ja izvēlaties kodam pievienot tipa anotācijas, tad Pytype’satklāt_tipu funkcija ir īpaši noderīga. Ja kodā ievietojat paziņojumu, kas skan palaist_tips (izteikt), Pytype novērtē izteikt un izdod brīdinājumu, kas raksturo tā veidu.

Ņemiet vērā, ka noteiktu Pytype uzvedību kontrolē, pašam kodam pievienojot atribūtus. Piemēram, ja vēlaties, lai Pytype nesūdzētos par trūkstošajiem atribūtiem vai dinamiski iestatītajiem moduļa dalībniekiem, jums tas jāpievieno _HAS_DYNAMIC_ATTRIBUTES = Patiesi attiecīgajai klasei vai modulim, nevis kaut kāda veida Pytype konfigurācijas metadatu iestatīšanai.

Autortiesības / Pylance

Autortiesības ir Microsoft Python tipa pārbaudītājs, kas iekļauts Visual Studio koda paplašinājuma Pylance sastāvā. Ja jūs jau esat VS koda lietotājs, paplašinājums Pylance ir ērtākais veids, kā strādāt ar autortiesībām; vienkārši instalējiet to un dodieties. Autortiesības nodrošina labu all-in-one tipa pārbaudi un kodēšanas procesu ar daudzām tādām pašām ērtībām un uzlabojumiem kā iepriekšējie Python analīzes rīki.

Tāpat kā Pytype, arī autortiesības var strādāt ar koda bāzēm, kurām nav nekāda veida informācijas. Šādos gadījumos autortiesības darīs visu iespējamo, lai secinātu, kādi veidi tiek spēlēti. Tādējādi jūs joprojām varat iegūt labus rezultātus, izmantojot Pytype vecākās koda bāzēs bez tipa deklarācijām. Bet laika gaitā jūs saņemsiet labākus rezultātus, pakāpeniski pievienojot tipa piezīmes savam kodam.

Autortiesības ir ļoti elastīgas veidos, kas papildina reālās pasaules Python projektu dizainu. Tāpat kā citu veidu pārbaudītājus, autortiesības var konfigurēt katram projektam, izmantojot JSON formatētu konfigurācijas failu projekta direktorijā. Konfigurācijas failā atsevišķus ceļus var izslēgt (nekad nepārbaudīt) vai ignorēt (kļūdas un brīdinājumi ir izslēgti), un opcijas ir ļoti detalizētas.

VS kodā darbvietām ar vairākām saknēm katrai var būt sava autortiesību konfigurācija, ja dažādām projekta daļām ir nepieciešamas dažādas savārstījuma konfigurācijas. Tādā pašā veidā jūs projektā varat definēt vairākas “izpildes vides”, katrai no tām ir savi venv vai importēšanas ceļi.

Drudzis

Pyre, ko izveidojuši Facebook un Instagram izstrādātāji, faktiski ir divi rīki vienā: tipa pārbaudītājs (Pyre) un statiskā koda analīzes rīks (Pysa). Abi ir paredzēti darbam roku rokā, lai nodrošinātu augstāku pārbaudes un analīzes līmeni nekā citi rīki, lai gan lietotājam ir nepieciešams nedaudz smagi pacelt, lai pilnībā izmantotu tos.

Pyre izmanto pieeju, kas līdzīga Pytype un Mypy. Ar neievadīto kodu rīkojas saudzīgāk nekā ar ievadīto kodu, tāpēc jūs varat sākt ar neievadītu Python koda bāzi un pievienot anotācijas pēc funkcijām un moduļiem pēc moduļiem. Modulī ieslēdziet “stingro režīmu”, un Pyre atzīmēs visas trūkstošās anotācijas. Vai arī jūs varat iestatīt stingru režīmu kā noklusējumu un atteikties no tā moduļa līmenī. Pyre strādās arī ar .pyi formāta stumbra failiem.

Piram ir spēcīga funkcija, kas ļauj migrēt koda bāzes uz drukātu formātu. The secināt komandrindas opcija uzņem failu vai direktoriju, izdara pamatotus minējumus par izmantotajiem veidiem un failiem lieto piezīmes. Tomēr vispirms vēlēsities izveidot sava koda dublējumkopijas! (Ja vēlaties iegūt informāciju par tipu no a skriešana Python programmu, to varat izdarīt ar citu Facebook / Instagram projektu MonkeyType.)

Kaut arī Pyre funkcijas atkārto citu šeit detalizēto paku īpašības, Pysa ir unikāls. Pysa veic koda “sārņu analīzi”, lai identificētu iespējamās drošības problēmas, paļaujoties uz plūsmas analīzes bibliotēku noteiktiem programmatūras komponentiem un atzīmēšanas kodu, kas, šķiet, ir neaizsargāts. Viss, kam pieskaras šis kods, arī tiks atzīmēts kā sabojāts, lai gan jūs varat norādīt komponentus, kas dezinficē datus, un noņemt šos datus no piesārņojuma diagrammas.

Viens trūkums ir tāds, ka Pysa trešo pušu komponentu bojājumu analīzes bibliotēka joprojām ir maza, tāpēc jums, iespējams, būs jāizstrādā savs modelis. Bet daudzas no piesārņojuma analīzēm ir paredzētas programmatūrai, kas tiek plaši izmantota, piemēram, tīmekļa vietnei Django, SQL Alchemy ORM un datu zinātnes bibliotēkai Pandas, nemaz nerunājot par kopēju failu sistēmas problēmu analīzi.

Kā darīt vairāk ar Python

  • Kā strādāt ar Python saraksta datu tipu
  • Kā iesaiņot Python lietotnes ar BeeWare portfeli
  • Kā palaist Anakondu plecu pie pleca ar citiem pitoniem
  • Kā izmantot Python datu klases
  • Sāciet darbu ar asinhronizāciju Python
  • Kā lietot asyncio Python
  • 3 soļi līdz Python asinhronajam remontam
  • Kā izmantot PyInstaller, lai izveidotu Python izpildāmos failus
  • Cython apmācība: kā paātrināt Python
  • Kā instalēt Python viedajā veidā
  • Kā pārvaldīt Python projektus, izmantojot dzeju
  • Kā pārvaldīt Python projektus ar Pipenv
  • Virtualenv un venv: paskaidrotas virtuālās Python vides
  • Python virtualenv un venv do's un don'ts
  • Paskaidrots Python vītne un apakšprocesi
  • Kā izmantot Python atkļūdotāju
  • Kā izmantot Timeit, lai profilētu Python kodu
  • Kā izmantot cProfile Python koda profilēšanai
  • Kā konvertēt Python uz JavaScript (un atkal atpakaļ)
$config[zx-auto] not found$config[zx-overlay] not found