Ohjelmointi

4 Python-tyyppistä tarkistinta pitämään koodisi puhtaana

Alussa Pythonilla ei ollut tyyppikoristeita. Tämä sopii yleistavoitteeseen, jonka mukaan kielestä tulee nopea ja helppo työskennellä, joustavilla objektityypeillä, jotka sopivat koodin kirjoittamisen käänteisiin ja auttavat kehittäjiä pitämään koodinsa suppeana.

Viime vuosina Python on kuitenkin lisännyt tyyppimerkintöjä tukemalla koko ohjelmistokulttuuria, joka on omistettu Pythonin tyypin tarkistamiseen kehityksen aikana. Python ei tarkista tyyppejä ajon aikana - ainakaan vielä. Hyödyntämällä kuitenkin hyvätyyppistä tarkistajaa ja ajamalla haulikkoa kanssasi valitsemassasi IDE: ssä voit käyttää Pythonin tyyppihuomautuksia seulomaan monia yleisiä virheitä ennen kuin ne osuvat tuotantoon.

Tässä artikkelissa käsittelemme neljää Pythonin tärkeintä tyyppitarkistuslisäosaa. Kaikki seuraavat suunnilleen samaa mallia, skannaten Python-koodin tyyppimerkinnöillä ja antamalla palautetta. Mutta jokainen tarjoaa omat hyödylliset lisäyksensä peruskonseptiin.

Mypy

Mypy oli epäilemättä ensimmäinen staattisen tyypin tarkistusjärjestelmä Pythonille, koska sen työ alkoi vuonna 2012, ja sitä kehitetään edelleen aktiivisesti. Se on lähinnä prototyyppi sille, kuinka kolmannen osapuolen tyyppiset kirjastot toimivat Pythonissa, vaikka monet muut ovat tulleet mukaan ja laajentaneet sen ominaisuuksia.

Mypy voi suorittaa itsenäisesti tai komentoriviltä, ​​tai se voi toimia osana editoria tai IDE: n linterintegraatiota. Monet toimittajat ja IDE: t integroivat Mypy; Visual Studio Code -sovelluksen Python-laajennus voi toimia sen kanssa suoraan. Suoritettaessa Mypy tuottaa raportteja koodisi johdonmukaisuudesta antamiensa tyyppitietojen perusteella.

Jos koodissasi ei ole tyyppimerkintöjä, Mypy ei suorita suurinta osaa kooditarkistuksista. Voit kuitenkin merkitä Mypy-toiminnolla merkitsemättömän koodin. Tämä voidaan tehdä vaihtelevalla tarkkuudella käyttäjän tarpeista riippuen.

Jos aloitat alusta koodikannalla ja haluat ennalta ehkäisevän aggressiivisen nukkaamisstrategian, voit käyttää --tiukka vaihtoehto estää kirjoittamaton koodi. Toisaalta, jos työskentelet vanhan koodikannan kanssa, jolla ei ole monia tyyppimäärityksiä, voit käyttää rennompia vaihtoehtoja, kuten estää vain kirjoittamattomat funktiomääritykset--disallow-untyped-defs samalla kun sallitaan muu kirjoittamaton koodi. Ja voit aina käyttää sisäisiä kommentteja, kuten # type: ohita jotta yksittäisiä viivoja ei merkitty.

Mypy voi käyttää PEP 484 -työtiedostoja, kun haluat käyttää tyyppivihjeitä moduulin julkisiin rajapintoihin. Tämän lisäksi Mypy tarjoaa itsepäinen, työkalu, joka luo automaattisesti tiedostot olemassa olevasta koodista. Tynkätiedostot käyttävät avaamattomalle koodille yleisiä tyyppejä, jotka voit merkitä tarvittaessa.

Pytyyppi

Googlen luoma Pytype eroaa Mypyn kaltaisista siinä, että se käyttää päätelmiä vain tyyppikuvaajien sijasta. Toisin sanoen, Pytype yrittää määrittää tyypit analysoimalla koodivirtaa sen sijaan, että luotettaisiin tiukasti tyyppihuomautuksiin.

Pytype erehtyy lempeyden puolella aina, kun on järkevää tehdä niin. Jos sinulla on operaatio, joka toimii ajon aikana ja ei ole ristiriidassa minkään merkinnän kanssa, Pytype ei ryöytä siitä. Tämä tarkoittaa kuitenkin, että jotkut ongelmat, jotka on merkittävä (esim. Muuttujan ilmoittaminen tyypin kanssa yhdessä kohdassa ja sitten sen määritteleminen uudelleen samassa yhteydessä), ohitetaan ilmoittamatta. Asiakirjoissa todetaan, että tällaiset asiat kielletään jossain vaiheessa tulevaisuudessa.

Jos päätät lisätä tyyppimerkintöjä koodiin, Pytype'spaljastustyyppi toiminto on erityisen kätevä. Jos lisäät koodiin lauseen, joka lukee paljastustyyppi (lauseke), Pytype arvioi lauseke ja antaa ilmoituksen, joka kuvaa sen tyyppiä.

Huomaa, että tiettyjä Pytype-käyttäytymistä hallitaan lisäämällä attribuutteja itse koodiin. Esimerkiksi, jos haluat estää Pytypeä valitamasta puuttuvista määritteistä tai moduulin jäsenistä, jotka on asetettu dynaamisesti, sinun on lisättävä attribuutti _HAS_DYNAMIC_ATTRIBUTES = Tosi kyseiselle luokalle tai moduulille, toisin kuin jonkinlaisten Pytype-kokoonpanon metatietojen asettaminen.

Tekijänoikeus / Pylance

Tekijänoikeus on Microsoftin Python-tyyppinen tarkistaja, joka sisältyy osana Visual Studio -koodin Pylance-laajennukseen. Jos olet jo VS-koodin käyttäjä, Pylance-laajennus on mukavin tapa työskennellä tekijänoikeuksien kanssa. vain asenna se ja mene. Tekijänoikeus tarjoaa hyvän all-in-one-tyyppitarkistuskokemuksen ja koodin nukkauskokemuksen monilla samoilla mukavuuksilla ja edistyksillä kuin edelliset Python-analyysityökalut.

Pytypen tavoin myös tekijänoikeus voi toimia kooditietokantojen kanssa, joilla ei ole minkään tyyppisiä tietoja. Tällöin tekijänoikeus tekee parhaansa päätelläkseen, mitkä tyypit ovat pelissä. Täten voit silti saada hyviä tuloksia Pytype-sovelluksella vanhemmilla koodipohjoilla ilman tyyppideklarointeja. Mutta saat parempia tuloksia ajan myötä, kun lisäät asteittain tyyppikommentteja koodiin.

Tekijänoikeudet ovat erittäin joustavia tavoilla, jotka täydentävät todellisten Python-projektien malleja. Kuten muiden tyyppien tarkistajien kohdalla, tekijänoikeudet voidaan määrittää projektikohtaisesti JSON-muotoisella kokoonpanotiedostolla projektin hakemistossa. Yksittäiset polut voidaan sulkea pois (ei koskaan tarkistaa) tai jättää huomiotta (virheet ja varoitukset on estetty) määritystiedostossa, ja vaihtoehdot ovat erittäin rakeisia.

VS-koodissa useilla juurilla olevilla työtiloilla voi olla kullakin oma tekijänoikeuksien määrityksensä, jos projektin eri osat tarvitsevat erilaisia ​​nukkauskokoonpanoja. Samalla tavalla voit määrittää projektissa useita "toteutusympäristöjä", joista jokaisella on omat venv- tai tuontireitinsä.

Pyre

Facebookin ja Instagramin kehittäjien luoma Pyre on itse asiassa kaksi työkalua yhdessä: tyyppitarkistin (Pyre) ja staattisen koodin analysointityökalu (Pysa). Nämä kaksi on suunniteltu toimimaan käsi kädessä korkeamman tarkastus- ja analyysitason tarjoamiseksi kuin muut työkalut, vaikka käyttäjän on tehtävä vähän raskasta nostoa hyödyntääkseen ne täysimääräisesti.

Pyre omaksuu samanlaisen lähestymistavan kuin Pytype ja Mypy. Kirjoittamatonta koodia käsitellään lempeämmin kuin kirjoitettua koodia, joten voit aloittaa kirjoittamattomalla Python-koodikannalla ja lisätä merkintöjä funktioittain ja moduuleittain moduuleittain. Ota moduulissa käyttöön "tiukka tila", ja Pyre merkitsee puuttuvat merkinnät. Tai voit tehdä tiukasta tilasta oletusarvon ja kieltäytyä moduulitasolla. Pyre toimii myös .pyi-muotoisten tynkätiedostojen kanssa.

Pyre-palvelussa on tehokas ominaisuus siirtää kooditietokannat kirjoitettuun muotoon. päättele komentorivivaihtoehto omistaa tiedoston tai hakemiston, tekee koulutettuja arvauksia käytetyistä tyypeistä ja käyttää merkintöjä tiedostoihin. Haluat kuitenkin ensin tehdä varmuuskopiot koodistasi! (Jos haluat saada tyyppitietoja a käynnissä Python-ohjelmalla, voit tehdä sen toisella Facebook / Instagram-projektilla, MonkeyType.)

Vaikka Pyren ominaisuudet toistavat muiden tässä kuvattujen pakettien ominaisuudet, Pysa on ainutlaatuinen. Pysa suorittaa koodin "tahra-analyysin" mahdollisten tietoturvakysymysten tunnistamiseksi vedoten tiettyjen ohjelmistokomponenttien vuonanalyysien kirjastoon ja haavoittuvalle näyttävälle liputuskoodille. Kaikki tämän koodin koskettamat merkitään myös pilaantuneiksi, vaikka voit määrittää komponentit, jotka puhdistavat tiedot, ja poistaa nämä tiedot tahrakaaviosta.

Yksi haittapuoli on, että Pysan kolmannen osapuolen komponenttien tahra-analyysien kirjasto on edelleen pieni, joten sinun on ehkä suunniteltava oma mallisi. Mutta monet tahra-analyysit koskevat laajasti käytettyjä ohjelmistoja, kuten Django-verkkokehys, SQL Alchemy ORM ja Pandas-tiedekirjasto, puhumattakaan yleisten tiedostojärjestelmien ongelmien analyyseistä.

Kuinka tehdä enemmän Pythonilla

  • Kuinka työskennellä Python-luettelotietotyypin kanssa
  • Kuinka pakata Python-sovellukset BeeWare-salkulla
  • Kuinka ajaa Anacondaa vierekkäin muiden pythonien kanssa
  • Kuinka käyttää Python-tietoluokkia
  • Aloita asynkronointi Pythonissa
  • Asyncion käyttäminen Pythonissa
  • 3 vaihetta Pythonin asynkroniseen huoltoon
  • Kuinka käyttää PyInstalleria Python-suoritettavien tiedostojen luomiseen
  • Cython-opetusohjelma: Kuinka nopeuttaa Pythonia
  • Kuinka asentaa Python älykkäästi
  • Kuinka hallita Python-projekteja Poetryn avulla
  • Kuinka hallita Python-projekteja Pipenv: llä
  • Virtualenv ja venv: Python-virtuaaliympäristöt selitetty
  • Python virtualenv ja venv do and don'ts
  • Python-ketjuttaminen ja aliprosessit on selitetty
  • Kuinka käyttää Python-virheenkorjainta
  • Kuinka käyttää timeit Python-koodin profilointiin
  • CProfilen käyttäminen Python-koodin profilointiin
  • Kuinka muuntaa Python JavaScriptiksi (ja takaisin)
$config[zx-auto] not found$config[zx-overlay] not found