Hacker News

Python Type Checker Fa'atusatusaga: Fa'ailoga o le Container Gaogao

Fa'amatalaga

15 min read Via pyrefly.org

Mewayz Team

Editorial Team

Hacker News

Aisea ua motusia ai e pusa gaogao siaki o le Python Type - ma le mea e te mafaia e uiga i ai

O le faiga fa'asolosolo a le Python ua matua matua talu mai le fa'alauiloaina e le PEP 484 ituaiga fa'ailoga i le 2015. I aso nei, e faitau miliona tagata atia'e e fa'alagolago i siaki tu'aiga fa'amau e pu'e ai pesi a'o le'i maua le gaosiga. Ae o loʻo i ai se tulimanu faʻalavelave, faʻalavelave o le ituaiga faiga o loʻo alu pea i luga e oʻo lava i inisinia poto masani: o le a le ituaiga o loʻo i ai i se atigipusa gaogao? A e tusia x = [] e aunoa ma se fa'amatalaga, e tatau ona mate e lau siaki ituaiga - ae ese le mate o siaki eseese. O lenei eseesega e mafua ai faafitauli moni mo 'au o loʻo tausia faʻamaufaʻailoga lapopoa, lea e mafai ai e le fesuiaʻiina poʻo le tuʻufaʻatasia o siaki ituaiga e mafai ona faʻaalia ai le faitau selau o mea sese e leʻi mafaufauina i le po.

O lenei tusiga o lo'o fa'avasegaina ai pe fa'afefea ona fa'aogaina e siaki fa'apitoa ituaiga Python e fa - mypy, pyright, pytype, ma pyre - fa'amatalaga o atigipusa gaogao, pe aisea latou te le ioe ai, ma po'o a ni ta'iala e mafai ona e fa'aaogaina e tusi ai le Python-safe e tusa lava po'o lau filifiliga meafaigaluega.

O le Fa'afitauli Autu: O Koneteina Gaogao e Fa'amanino Fa'amanino

Mafaufau i le laina fa'aletonu lea o le Python: i'uga = []. O iugase lisi[int]? Se lisi[str]? Se lisi[dict[str, Any]]? A aunoa ma se fa'amatalaga faaopoopo, e matua leai lava se auala e iloa ai. E le afaina le taimi o le Python - o lisi e eseese i le natura - ae e manaʻomia e le au siaki faʻamautu se ituaiga sima i fesuiaiga uma e fai ai a latou galuega. O le mea lea e tupu ai se vevesi fa'avae i le va o le fetuutuuna'i malosi a le Python ma fa'amautinoaga o lo'o taumafai e tu'uina atu.

O le fa'afitauli e tu'ufa'atasia ma lomifefiloi ma seti. O se {} gaogao ua fa'avasegaina o se dict, ae le o se set, lea e fa'aopoopoina ai le fa'auiga le mautonu i le pito i luga o le fa'ailoga tulaga fa'atusa. Ma fa'aputuga fa'aputu - manatu defaultdict(lisi)po'o i'uga = {k: [] mo k i ki} - fa'aoso fa'ailoga afi i o latou tapula'a. O ituaiga siaki ta'itasi ua uma ona fa'atupuina a latou lava fa'amanino, ma o eseesega e sili atu ona taua nai lo le tele o tagata atia'e e iloa.

I faiga fa'akomepiuta o lo'o fa'agaioi ai galuega moni - pe o se CRM o lo'o fa'afoeina fa'amaumauga a tagata fa'atau, o se fa'asologa o pili o lo'o fa'atupuina aitema laina, po'o se au'ili'ili paipa fa'aputuina metrics - o koneteina gaogao e aliali mai i taimi uma o ni fa'asologa amata. O le sese o latou ituaiga e le na'o le fa'atupuina o lapata'iga; e mafai ona natia ai ni mea sese moni o lo'o soso'o atu i le taimi e ta'avale ai.

Mypy: Fa'atuai Fa'atuai Fa'atasi ma So'o se Fa'ata'atia

Mypy, ole siaki pito sili ona leva ma sili ona fa'aaogaina Python, e fai se faiga fa'alelei ile koneteina gaogao. Pe a faʻafeiloaʻi x = []i le lautele o galuega, e taumafai efaʻatuai le filifiliga ituaigama ​​faʻailoa le ituaiga elemene mai le faʻaaogaina mulimuli ane. Afai e te tusia x = [] sosoo ai ma le x.append(42), mypy o le a fa'ailoa list[int]. O lenei ta'iala "'auai" e matua'i fa'ate'ia lelei lava mo fa'amatalaga tuusa'o lea o lo'o fa'atumuina ai le atigipusa i totonu o le lautele lava e tasi.

Ae ui i lea, o le amio a mypy e matua suia lava e fa'atatau i le fa'amatalaga ma le fa'atonuga. I le lautele o le module (fa'ailoga pito i luga), po'o le taimi e pasi atu ai le koneteina i se isi galuega a'o le'i fa'atumuina, e masani ona toe fo'i le mypy i le lisi [So'o se]. I lalo o le --strict fuʻa, e faʻaoso ai se mea sese, ae i le tulaga faʻaletonu e pasi lemu. O lona uiga o 'au o lo'o ta'avale mypy e aunoa ma se faiga fa'apolopolo e mafai ona fa'aputuina le tele o koneteina fa'ato'a fa'aigoa o lo'o fai e pei o ni 'au e sola ese mai le ituaiga faiga, ma fa'ato'ilaloina lona fa'amoemoe.

O se tasi o amioga fa'apitoa: mypy versions a'o le'i o'o i le 0.990 o nisi taimi e fa'ailoa mai ai list[Le iloa] totonu ona fa'alautele atu lea i le list[So'o se]i le tofiga. Post-0.990, na faʻamalosia le faʻasalaga, ae o le suiga na gau ai se numera faʻateʻia o faʻamaumauga moni o le lalolagi na faʻalagolago i amioga faʻatagaina e aunoa ma le iloaina. Ole autu faifaipea lea - o suiga ile va'aiga o atigipusa gaogao o se tasi lea o fa'afouga sili ona fa'alavelave su'esu'e ona o fa'ata'ita'iga o lo'o so'o se mea.

Pyright: Fa'ailoga Fa'asa'o ma le Ituaiga "Le iloa"

Pyright, atiae e Microsoft ma fa'aola Pylance i le VS Code, e matua'i ese lava le tulaga fa'afilosofia. Nai lo le toe fo'i lemu i tua So'o se, o le pyright e va'aia le va o le Le iloa (se ituaiga e le'i fa'amautuina) ma le So'o se(o le fa'ailoa manino mai le siakiina o ituaiga). A e tusia x = [] i le faiga sa'o a le pyright, e fa'ailoa mai ai lisi [Le iloa]ma lipoti mai ai se fa'ama'i, fa'amalosia oe e tu'uina atu se fa'amatalaga.

O le Pyright e sili atu le malosi e uiga i le fa'aiti i totonu o le lautele. Afai e te tusia:

  • x = [] sosoo ai ma x.append("hello") — pyright fa'ailoa lisi[str]
  • x = [] sosoo ai ma x.append(1) ona x.append("hello") — pyright infers list[int | str
  • x = [] pasi sa'o i se galuega o lo'o fa'amoemoe lisi[int] — pyright fa'ailo lisi[int] mai le vala'au-site context
  • x = [] toe fo'i mai se galuega e aunoa ma se fa'amatalaga fa'afo'i ituaiga - e lipoti atu e pyright se mea sese nai lo le matemate

O lenei fa'ai'uga fa'alua (fa'aaogā fa'aoga mulimuli ma ituaiga fa'amoemoe mai nofoaga e vala'au ai) e sili atu le sa'o o le pyright nai lo mypy mo koneteina gaogao. O le tradeoff o le verbosity: pyright's strict mode fuʻa e uiga i30-40% sili atu mataupui luga o se tulaga masani unannotated codebase faʻatusatusa i le mypy's strict mode, e tusa ai ma le auʻiliʻiliga mai le tele o lipoti o femalagaiga tatala. Mo 'au o lo'o fausia faiga lavelave pito i tua - fa'apea, o se fa'avae e pulea 207 modules feso'ota'i e va'aia le CRM, totogi, ma au'ili'iliga - o le fa'amaoni o le pyright e maua ai le fa'aogaina o feso'ota'iga ma'ale'ale e misia e fa'ai'uga vaivai.

Pytype ma Pyre: O Auala Fa'atauva'a Fa'atauva'a

O le pytype a Google atonu o lo'o fa'aogaina le auala sili ona fa'atino. Nai lo le mana'omia o fa'amatalaga po'o le toe fo'i i tua So'o se, e fa'aaoga e le pytype fa'avasegaina o polokalame atoae siaki ai pe fa'apefea ona fa'aogaina se atigipusa i tua atu o galuega. Afai e te fatuina se lisi gaogao i se tasi galuega ma pasi atu i le isi e faʻapipiʻi ai numera, e masani ona mafai e le pytype ona faʻaalia list[int]e aunoa ma se faʻamatalaga. O lenei fa'ai'uga fela'ua'i e taugata fa'atatau - e matua telegese le pytype nai lo mypy po'o le pyright i luga o fa'amaufa'ailoga lapopo'a - ae e fa'aitiitia ai fa'ailoga sese i code e le'i fa'ailoaina.

Pytype fo'i fa'ailoa mai le manatu o "ituaiga fa'apitoa" mo koneteina gaogao. O se [] fa'ato'a faia e maua ai se vaega o lo'o fa'asolosolo fa'alelei a'o fa'afeiloa'i e le siaki le tele o fa'aoga. E matagofie le manatu ae e mafai ona maua mai ai ni fe'au sese e fenumiai pe a le mafai ona foia atoatoa le vaega o le ituaiga, e pei o le taimi e tafe ai se atigipusa gaogao i le tele o galuega e aunoa ma le fa'atumuina.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Meta's pyre, i le taimi nei, e fa'alatalata atu i amioga a mypy ae sili atu le fa'aletonu. O Pyre e fa'aogaina x = [] o se lisi[le iloa]ma ​​e mana'omia ai fa'amatalaga i le tele o fa'amatalaga. O le mea e va'aia ai e pyre ia lava o lo'o i lona tagofiaina ogaogao lomifefiloi literals fa'aaoga e pei o kwargs - o se fa'ata'ita'iga masani i fa'ava'a uepi. O Pyre e iai fa'amatalaga fa'apitoa e fa'ailoa ai ituaiga lolomifefiloi mai fa'amatalaga fa'aupuga o fa'amatalaga, fa'aitiitia le mamafa o fa'amatalaga i fa'a-fa'avae-fa'avae mamafa. Ona o le tele o talosaga i luga ole laiga fa'aonaponei e aofia ai le tele o le fa'aogaina o lomifefiloi mo le fa'atulagaina ma le fa'afoeina o talosaga, o lenei fa'ata'ita'iga e totogi ai ni tufatufaga.

A'afiaga o le Lalolagi Moni: Pe a Uu le Fa'ai'uga Eseese

O le eseesega i le va o siaki ituaiga atonu e foliga fa'ale-a'oa'oga se'i vagana ua e iloa i latou i totonu o se fa'amaumauga o le gaosiga. Mafaufau i se faiga masani i talosaga faapisinisi: amatalia se fausaga fa'amaumauga e fa'atumuina i tulaga.

O koneteina gaogao e sili ona mata'utia, e le o le fu'a lea o siaki siaki—o mea ia e pasi lemu ma se So'o se ituaiga, e mafai ai ona fa'aputuina fa'amatalaga le fetaui e aunoa ma se lapataiga se'ia pa'u se galuega i lalo i le taimi fa'atasi ma se TypeErrore toetoe a le mafai ona toe su'esu'e i lona amataga.

O se fa'ata'ita'iga mautinoa: o se 'au i le amataga o le fintech na lipotia mai le fa'aaluinatolu aso e fa'apipi'i ai se fa'afitauli o le gaosigalea o se lisi gaogao, na amataina i se galuega fa'agaioiga o totogi, na fa'ailoaina o lelisi [So'o se]e mypy. O le lisi e tatau ona i ai Decimalmeafaitino mo le aofaʻi o tupe, ae o se ala faʻailoga o loʻo faʻaopoopoina floattaua nai lo. O le manatu malie a Mypy na fa'atagaina lemu. Na fa'ato'a alia'e le pusi ina ua fa'ata'amilomilo mea sese i le numera fa'alele na mafua ai le $0.01 o le eseesega i luga o le 12,000 pili. Ana latou fa'aogaina le pyright i se faiga sa'o, pe na'o le fa'aigoaina o le lisi gaogao o lisi [Decimal], semanu e maua le pusa i le taimi o le atina'e.

I Mewayz, o lo'o fa'agasolo ai le fa'asologa o pili, fa'atatauga o totogi, ma su'esu'ega tau tupe i le 138,000+ fa'amatalaga a tagata fa'aoga, o lenei ituaiga o va o le saogalemu e le'o fa'atatau - o le eseesega i le va sa'o o totogi ma toe fa'atatauga taugata. O le fa'atonuina o le taina o le ta'i fa'atatau i le amataina o koneteina, o se tasi lea o faiga fa'ainisinia e "fiafia" e taofia ai fa'alavelave fa'afiafiaga.

Fa'ata'ita'iga Sili mo le Fa'amataina o Koneteina Puipui

Po'o le a le ituaiga siaki e fa'aogaina e lau 'au, o lo'o i ai ni ta'iala mautu e fa'ate'a uma ai le fa'aogaina o atigipusa gaogao. O le fa'amoemoe ia aua ne'i fa'alagolago i fa'ai'uga mo atigipusa gaogao - fa'amanino le ituaiga ina ia feavea'i lau fa'ailoga i siaki uma ma puipuia mai suiga o amioga i le va o fa'aliliuga.

  1. Ia fa'ailoa i taimi uma suiga o pusa gaogao. Tusi i'uga: list[int] = [] nai lo le i'uga = []. O le tau fa'atauva'a laiti e fa'atauva'a pe a fa'atusatusa i le taimi fa'apolopolo ua fa'asaoina. Ole fa'ata'ita'iga tasi lea e fa'ate'a ai pe tusa ma le 80% o fa'afitauli o fa'ailoga pusa gaogao.
  2. Fa'aoga galuega fai falegaosimea mo koneteina lavelave. Nai lo le cache = {}, tusi se galuega e pei o def make_cache() -> dict[str, list[UserRecord]]: return {}. O le fa'amatalaga o le ituaiga fa'afo'i e fa'amanino ai le ituaiga fa'amoemoeina ma fa'amauina e le tagata lava ia.
  3. E mana'o i tagata fau lolomi nai lo mea moni mo ituaiga e le taua. Tusi aitema: set[int] = set() nai lo le faalagolago i le seti o le malamalama. Mo defaultdict ma Counter, ia tu'u i taimi uma le ituaiga parakalafa: faitau: Counter[str] = Counter().
  4. Fa'atonu le faiga sa'o a lau su'esu'ega mo le fa'ailoga fou. E lagolago uma le mypy ma le pyright i faila ta'itasi po'o le fa'atonuga ta'itasi. Fa'aaga le su'esu'ega fa'apitoa i modules fou a'o fa'agasolo malie le fa'ailoga tu'ufa'atasi. Ole mea lea e taofia ai le fa'aputuina o atigipusa fou e le'i fa'aigoaina.
  5. Fa'aopoopo le ituaiga siaki fa'atusatusaga i lau paipa CI. O le fa'agaioi uma o mypy ma pyright i luga o lau codebase e vave maua ai le eseesega o fa'ai'uga. Afai e pasia e se mamanu le tasi siaki ae le manuia le isi, o se faailoga e le o manino le ituaiga.

O le Ata Tele: Su'esu'e Tuaiga e fai ma Fa'ata'ita'i Au

O le fa'aogaina o atigipusa gaogao o le mea mulimuli lava o se microcosm o se lu'itau tele i le faiga o le Python: o le vevesi i le va o le faigofie ma le saogalemu. O le filosofia a Python o le "matou te malilie uma i tagata matutua" e aoga tele mo le faʻataʻitaʻiga ma faʻamaumauga, ae o faiga e faʻaogaina ai le faitau afe o tagata faʻaoga e manaʻomia ni faʻamaoniga sili atu. O le mea moni e fa o ituaiga siaki tetele e le ioe i se mea e pei o le ituaiga []o lo'o fa'amamafa mai ai o le Python typing ecosystem o lo'o matua.

Mo 'au fa'ainisinia o lo'o fausia ni fa'avae lavelave - pe o lo'o e puleaina ni nai microservices po'o se faiga tu'ufa'atasia ma le faitau selau o modula feso'ota'i e pei o le OS pisinisi a Mewayz - o le fautuaga fa'atino e tuusa'o lava: aua le fa'alagolago i fa'amatalaga mo atigipusa gaogao, filifili se siaki ituaiga ma fa'atulaga lelei, ma fa'aogaina fa'amatalaga fa'ailoga e mafai ona fa'amaonia e masini. O le lima minute e fa'aalu e tusi ai lisi [Invoice] nai lo le [] o le a fa'asaoina ai itula o le fa'apipi'iina pe a fua lau codebase.

A'o fa'aauau pea ona tula'i mai le PEP 696 (ituaiga fa'ailoga fa'aletonu) ma le PEP 695 (type parameter syntax) i fa'aliliuga fou a le Python, o le a fa'aleleia atili le ergonomics o le fa'aoga manino. Ole va ole "annotated" ma le "unnotated" Python o le a vaapiapi. Ae se'ia o'o lava i lena aso, o lo'o tumau pea ituaiga o atigipusa ma'oti o se tasi o faiga aupito maualuga-ROI i le mea faigaluega a le Python developer's toolkit - o se fa'atonuga la'ititi e totogi tului fa'aopoopo i vaega ta'itasi, ta'amilosaga ta'itasi, ma fa'atinoga uma o gaosiga.

Fausia Lau Pisinisi OS i Aso Nei

Mai tagata tuto'atasi i lala sooupu, Mewayz fa'aola le 138,000+ pisinisi fa'atasi ai ma le 207 fa'atasi. Amata fua, fa'aleleia pe a e tuputupu a'e.

Fau se Teugatupe Saoloto →

Fesili e Fai soo

Aisea e le mafai ai e siaki fa'aigoa ona malilie i le ituaiga lisi gaogao?

A e tusia le `x = []`, e tatau i le su'esu'e o le ituaiga e fa'ailoa mai se ituaiga e aunoa ma ni fa'ailo manino. E ese'ese siaki e fa'aogaina ni ta'iala 'ese'ese: o nisi e fa'ailoa mai 'lisi [So'o se]' (se lisi o so'o se mea), a'o isi e ono fa'ailoa mai se ituaiga e sili atu ona ma'oti ae le sa'o pei ole 'lisi [Leai]'. O le leai o se tulaga lautele o le mafuaaga lea latou te le ioe ai. Mo galuega faatino e fa'aoga ai le tele o siaki, o lenei fete'ena'iga e mafai ona avea ma se ma'i tiga tele, malepe au'ili'iliga i se tasi meafaigaluega ae pasi atu i le isi.

O le a le auala sili ona faigofie e fa'aleleia ai mea sese o pusa gaogao?

O le fofo sili ona tuusa'o o le tu'uina atu lea o se fa'amatalaga manino. Nai lo le `my_list = []`, tusi le `my_list: list[str] = []` e fa'ailoa manino ai le ituaiga fa'amoemoe. O lenei mea e aveese uma ai le le mautonu mo le siaki ituaiga, faʻamautinoa amioga faifaipea i mea faigaluega eseese pei o mypy, Pyright, ma Pyre. O le faiga lea e fautuaina mo fa'amatalaga uma o koneteina gaogao ina ia puipuia ai fa'ailoga sese.

E fa'afefea ona ou taulimaina atigipusa gaogao i totonu o fa'amatalaga o vasega?

Ose fa'afitauli masani ona o fa'amatalaga i totonu o vasega e mana'omia ai le fa'aogaina fa'apitoa. E tatau ona e fa'aogaina le `from __future__ import annotations` fa'aulufale mai po'o se `ClassVar` fa'amatalaga pe afai o le lisi e fa'amoemoe e avea ma uiga o le vasega. Mo se fa'ata'ita'iga, `vasega MyClass: my_list: ClassVar[list[str]] = []`. A aunoa ma lea mea, e ono tauivi le tagata su'e ituaiga e fa'ailoa sa'o le ituaiga, e i'u ai i mea sese.

E iai ni mea faigaluega e fesoasoani i le fa'afoeina o nei fa'afitauli ile taina i galuega tetele?

Ioe, su'esu'e ituaiga fa'apitoa e pei o Pyright (lea e fa'amalosia ai le Pylance i le VS Code) e sili ona lelei i le taulimaina o fa'amatalaga lavelave. Mo fa'amaufa'ailoga lapopo'a, o fa'avae e pei o Mewayz (o lo'o ofoina atu 207 su'esu'ega modules mo le $19/masina) e mafai ona maua ai le loloto, sili atu le tumau siaki siaki ma fesoasoani e fa'amalosia faiga fa'amatalaga i lau 'au atoa, e fa'aitiitia ai fa'aletonu o lo'o talanoaina i le tusiga.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime