Programovanie

4 kontroly typu Pythonu, aby bol váš kód čistý

Na začiatku nemal Python žiadne ozdoby typu. To sa zhoduje s celkovým cieľom, ktorým je rýchla a ľahká práca s jazykom, s flexibilnými typmi objektov, ktoré vyhovujú zvratom pri písaní kódu, a pomáhajú vývojárom udržiavať ich kód stručný.

Za posledných pár rokov však Python pridal podporu pre anotácie typov, čím inšpiroval celú kultúru softvéru zameraného na kontrolu typu Pythonu počas vývoja. Python nekontroluje typy za behu - aspoň zatiaľ. Ale využitím dobrej kontroly typu a jazdením na brokovnici s vami vo vašom IDE, ktoré si vyberiete, môžete použiť anotácie typu Pythonu na vytienenie mnohých bežných chýb predtým, ako zasiahnu produkciu.

V tomto článku sa venujeme štyrom z hlavných doplnkov kontroly typu pre Python. Všetky sledujú zhruba rovnaký vzor, ​​skenujú kód Pythonu s anotáciami typov a poskytujú spätnú väzbu. Ale každý z nich ponúka svoje vlastné užitočné doplnky k základnému konceptu.

Mypy

Mypy bol pravdepodobne prvý systém kontroly statického typu pre Python, pretože práce na ňom začali v roku 2012 a stále je v aktívnom vývoji. Je to v podstate prototyp fungovania knižníc na kontrolu typov tretích strán v Pythone, aj keď odvtedy prišlo mnoho ďalších a rozšírili svoje funkcie.

Mypy môže byť spustený samostatne alebo z príkazového riadku, alebo môže fungovať ako súčasť integrácie editora alebo integrovaného zberača IDE. Mnoho editorov a IDE integruje Mypy; Rozšírenie Visual Studio Code pre Python s ním môže pracovať priamo. Po spustení Mypy generuje správy o konzistencii vášho kódu na základe informácií o type, ktoré poskytuje.

Ak váš kód neobsahuje anotácie typov, Mypy nebude vykonávať prevažnú väčšinu svojich kontrol kódu. Môžete však použiť Mypy na nahlásenie bez poznámok. To sa dá dosiahnuť s rôznym stupňom prísnosti v závislosti od potrieb človeka.

Ak začínate úplne od základu s kódovým základom a chcete preventívne agresívnu stratégiu podšívky, môžete použiť --prísne možnosť zabrániť akýmkoľvek netypickým kódom. Na druhej strane, ak pracujete so starou základňou kódov, ktorá nemá veľa definícií typov, môžete použiť uvoľnenejšie možnosti, napríklad zabrániť iba netypovaným definíciám funkcií s--zakázať-netypové-defs zatiaľ čo umožňuje iný netypický kód. Vždy môžete použiť vložené komentáre ako # typ: ignorovať aby jednotlivé linky neboli označené.

Mypy môže využívať súbory typu stub PEP 484, ak chcete použiť tipy na zadanie pre verejné rozhrania modulu. Okrem toho Mypy ponúka tvrdohlavosť, nástroj, ktorý automaticky generuje útržkové súbory z existujúceho kódu. Pre netypový kód používajú súbory stubu všeobecné typy, ktoré potom môžete podľa potreby označiť.

Pytyp

Pytype, ktorý vytvoril Google, sa od Mypy líši používaním inferencie namiesto iba deskriptorov typu. Inými slovami, Pytype sa pokúša určiť typy analýzou toku kódu, a nie sa spoliehať výlučne na anotácie typov.

Pytype sa mýli na strane zhovievavosti, kedykoľvek to má zmysel. Ak máte operáciu, ktorá funguje za behu, a neprotirečí žiadnym anotáciám, Pytype na to nezanevrie. To však znamená, že niektoré problémy, ktoré by mali byť označené (napr. Deklarovanie premennej s typom v jednom bode a jej následné predefinovanie v rovnakom kontexte), prechádzajú neohlásene. Dokumentácia uvádza, že také veci budú v budúcnosti niekedy zakázané.

Ak sa rozhodnete do svojho kódu pridať anotácie typov, potom Pytype’styp_odhalenia funkcia príde zvlášť užitočná. Ak do kódu vložíte vyhlásenie, ktoré znie typ_odhalenia (expr), Hodnotí Pytype expr a vydá výstrahu, ktorá popisuje jeho typ.

Upozorňujeme, že určité správanie Pytype sa ovláda pridaním atribútov do samotného kódu. Napríklad, ak chcete zabrániť Pytype v sťažovaní sa na chýbajúce atribúty alebo členov modulu, ktorí sú nastavovaní dynamicky, musíte pridať atribút _HAS_DYNAMIC_ATTRIBUTES = Pravda príslušnej triede alebo modulu, na rozdiel od nastavenia akýchsi metaúdajov konfigurácie Pytype.

Pyright / Pylance

Pyright je kontrola typu Python spoločnosti Microsoft, ktorá je súčasťou rozšírenia Pylance pre Visual Studio Code. Ak už ste používateľom kódu VS, rozšírenie Pylance je najpohodlnejším spôsobom práce s programom Pyright; stačí ho nainštalovať a ísť. Aplikácia Pyright poskytuje dobré skúsenosti s kontrolou typu a vložením kódu s mnohými rovnakými vymoženosťami a pokrokmi ako predchádzajúce nástroje na analýzu Pythonu.

Rovnako ako Pytype, aj Pyright môže pracovať s databázami kódov, ktoré neobsahujú žiadne informácie o type. V týchto prípadoch sa spoločnosť Pyright bude snažiť vyvodiť, aké typy sú v hre. Takto môžete s Pytype stále dosahovať dobré výsledky na starších databázach kódov bez deklarácií typov. Postupným pridávaním poznámok k písaniu do kódu však dosiahnete lepšie výsledky.

Pyright je vysoko flexibilný spôsobom, ktorý dopĺňa návrhy projektov Pythonu v reálnom svete. Rovnako ako v prípade iných typov kontroly typu, aj Pyright je možné nakonfigurovať na základe jednotlivých projektov pomocou konfiguračného súboru vo formáte JSON v adresári projektu. Jednotlivé cesty môžu byť v konfiguračnom súbore vylúčené (nikdy nekontrolované) alebo ignorované (chyby a varovania potlačené) a možnosti sú veľmi podrobné.

Vo VS Code môžu mať pracovné priestory s viacerými koreňmi každý svoju vlastnú konfiguráciu Pyright, pre prípad, že by rôzne časti projektu potrebovali inú konfiguráciu podšívky. V rovnakom duchu môžete v rámci projektu definovať viac „vykonávacích prostredí“, každé s vlastnými cestami venv alebo importom.

Hranica

Program Pyre, ktorý vytvorili vývojári na Facebooku a Instagrame, je vlastne dva nástroje v jednom: nástroj na kontrolu typu (Pyre) a nástroj na analýzu statického kódu (Pysa). Tieto dva systémy sú navrhnuté tak, aby navzájom spolupracovali a poskytovali vyššiu úroveň kontroly a analýzy ako iné nástroje, aj keď používateľ musí urobiť trochu ťažkého zdvihu, aby ich mohol naplno využívať.

Spoločnosť Pyre uplatňuje podobný prístup ako Pytype a Mypy. S netypovým kódom sa zaobchádza miernejšie ako s typovým kódom, takže môžete začať s netypovou Pythonovou kódovou základňou a pridávať anotácie funkciu po funkcii a modul po module. V module zapnite „prísny režim“ a program Pyre nahlási všetky chýbajúce anotácie. Alebo môžete nastaviť prísny režim ako predvolený a deaktivovať ho na úrovni modulu. Pyre bude tiež pracovať so súbormi s blokovaním formátu .pyi.

Pyre má výkonnú funkciu na migráciu databázových základov do strojopisného formátu. The vyvodiť voľba príkazového riadku vloží súbor alebo adresár, urobí poučené hádky o použitých typoch a použije na súbory anotácie. Najprv si však budete chcieť urobiť zálohu svojho kódu! (Ak chcete získať informácie o type od a bežiaci Program Python, môžete to urobiť s iným projektom Facebook / Instagram, MonkeyType.)

Zatiaľ čo vlastnosti Pyre odrážajú vlastnosti ostatných tu popísaných balíkov, Pysa je jedinečná. Spoločnosť Pysa vykonáva „slabú analýzu“ kódu, aby identifikovala potenciálne problémy so zabezpečením, pričom sa spolieha na knižnicu analýz toku určitých softvérových komponentov a nahlási kód, ktorý sa javí ako zraniteľný. Čokoľvek, na čo sa dotkne tento kód, bude tiež označené ako poškvrnené, môžete však určiť komponenty, ktoré dezinfikujú údaje, a odstrániť ich zo slabého grafu.

Jednou nevýhodou je, že knižnica analýz poškodzovania komponentov tretích strán od spoločnosti Pysa je stále malá, takže možno budete musieť navrhnúť svoj vlastný model. Ale veľa slabých analýz je pre softvér, ktorý je široko používaný, ako napríklad webový rámec Django, SQL Alchemy ORM a knižnica dátových vied Pandas, nehovoriac o analýzach bežných problémov so súborovým systémom.

Ako urobiť viac s Pythonom

  • Ako pracovať s dátovým typom zoznamu Python
  • Ako zabaliť aplikácie v Pythone s Aktovkou BeeWare
  • Ako bežať Anakondu bok po boku s ostatnými Pytónmi
  • Ako používať dátové triedy Pythonu
  • Začnite s asynchronizáciou v Pythone
  • Ako používať asyncio v Pythone
  • 3 kroky na generálnu opravu asynchrónneho kódu Python
  • Ako používať program PyInstaller na vytvorenie spustiteľných súborov Pythonu
  • Výukový program pre Cython: Ako zrýchliť Python
  • Ako inteligentne nainštalovať Python
  • Ako spravovať projekty Pythonu pomocou Poetry
  • Ako spravovať projekty Pythonu pomocou Pipenv
  • Virtualenv a venv: Vysvetlenie virtuálnych prostredí Pythonu
  • Python virtualenv a venv robí a nerobí
  • Vysvetlenie vlákien a podprocesov v jazyku Python
  • Ako používať debugger Pythonu
  • Ako používať timeit na profilovanie kódu Pythonu
  • Ako používať cProfile na profilovanie kódu Pythonu
  • Ako previesť Python na JavaScript (a späť)
$config[zx-auto] not found$config[zx-overlay] not found