Hacker News

I-Python Type Checker Uthelekiso: I-Empty Container Inference

Amagqabantshintshi

9 min read Via pyrefly.org

Mewayz Team

Editorial Team

Hacker News

Kutheni izikhongozeli ezingenanto ziphula iiCheckers zoHlobo lwePython-Kwaye Yintoni onokuyenza ngayo

Inkqubo yokuchwetheza kancinane yePython ikhule ngokubonakalayo ukusukela oko iPEP 484 yazisa uhlobo lwengcebiso ngo-2015. Namhlanje, izigidi zabaphuhlisi baxhomekeke kuhlobo lokuhlola olumileyo ukuze babambe iincukuthu phambi kokuba zifike kwimveliso. Kodwa kukho ikona efihlakeleyo, ephoxayo yenkqubo yohlobo esahamba neenjineli ezinamava: loluphi uhlobo lwesikhongozeli esingenanto? Xa ubhala x = [] ngaphandle kwesichasiselo, umhloli wakho wohlobo kufuneka aqikelele - kunye nabahloli abahlukeneyo baqikelele ngokuhlukileyo. Oku kwantlukwano kudala iingxaki zokwenyani kumaqela agcina iziseko zekhowudi ezinkulu, apho ukutshintsha okanye ukudibanisa abakhangeli bohlobo kunokuvela amakhulu eempazamo ezingalindelekanga ngobusuku nje obunye.

Eli nqaku lichaza indlela ezine eziphambili zokutshekisha uhlobo lwePython - i-mypy, i-pyright, i-pytype, kunye ne-pyre - iphatha i-container engenanto yesikhongozeli, kutheni bengavumelani, kwaye zeziphi izicwangciso ezisebenzayo onokuzisebenzisa ukuze ubhale uhlobo olukhuselekileyo lwePython ngaphandle kokukhetha kwakho isixhobo.

Ingxaki enguNdoqo: Izikhongozeli ezingenanto azintsonkothanga ngokweNdalo

Qwalasela lo mgca umsulwa wePython: iziphumo = []. Ngaba iziphumoziluluhlu[int]? Uluhlu [str]? Aluluhlu[dict[str, Nayiphi]]? Ngaphandle komxholo owongezelelweyo, ngokuqinisekileyo akukho ndlela yokwazi. Ixesha lokubaleka lePython alikhathali - izintlu ziyahluka ngokwendalo - kodwa abakhangeli bohlobo lwe-static kufuneka banikeze uhlobo lwekhonkrithi kuyo yonke into eguquguqukayo ukwenza umsebenzi wabo. Oku kudala ukruthakruthwano olusisiseko phakathi kokuguquguquka okuguquguqukayo kwePython kunye neziqinisekiso ezithi uhlalutyo olumileyo luzama ukunika.

Ingxaki idibanisa nezichazi-magama kunye neeseti. I-empty {} icalulwe ngokwenene njengei-dict, hayiiseti, eyongeza i-syntactic ambiguity phezu komgangatho wodidi lwe-ambiguity. Kwaye izikhongozeli ezifakwe kwindlwane — cingadefaultdict(uluhlu) okanyeiziphumo = {k: [] ze-k kwizitshixo} — push inference inference engines to their limits. Uhlobo ngalunye umkhangeli luphuhlise eyakhe i-heuristics, kwaye umahluko ubaluleke kakhulu kunokuba uninzi lwabaphuhlisi becinga.

Kwiinkqubo zemveliso ezilungisa umthwalo wokwenyani - nokuba yiCRM ephethe iirekhodi zabathengi, imodyuli ye-invoyisi evelisa izinto zomgca, okanye i-analytics pipeline aggregating metrics - izikhongozeli ezingenanto zivela rhoqo njengeepateni zokuqalisa. Ukufumana iintlobo zazo ezingalunganga akuvelisi nje izilumkiso ze-linter; iyakwazi ukufihla ibugs zokwenyani ezityibilikayo ukuya kwixesha lokusebenza.

Mypy: I inference erhoxisiweyo nayo nayiphi na engacacanga

I-Mypy, eyona indala kunye neyona ndlela yamkelekileyo yokujonga uhlobo lwePython, ithatha indlela ethambileyo kwizikhongozeli ezingenanto. Xa idibana x = [] kububanzi bomsebenzi, izama uku-kuhlehlisa uhlobo lwesigqibo kwaye inike uhlobo lwe-elementi ekusebenziseni okulandelayo. Ukuba ubhala x = [] ilandelwa ngux.append (42), i-mypy iya kuchaza uluhlu[int]. Eli qhinga "join" lisebenza ngokumangalisayo kwiimeko ezithe ngqo apho isikhongozeli sizaliswe ngaphakathi kwendawo efanayo.

Nangona kunjalo, i-mypy's behaviour itshintsha kakhulu ngokuxhomekeke kumxholo kunye nokungqongqo kwemimiselo. Kumda wemodyuli (ikhowudi yomgangatho ophezulu), okanye xa isikhongozeli sigqithiselwa komnye umsebenzi ngaphambi kokuba sigcwaliswe, i-mypy ihlala ibuyela kuluhlu Nayiphi na]. Ngaphantsi kwe --ngqongqo iflegi, oku kubangela impazamo, kodwa kwimowudi engagqibekanga idlula ngokuthula. Oku kuthetha ukuba amaqela aqhuba i-mypy ngaphandle kwemowudi engqongqo anokuqokelela inqwaba yezikhongozeli ezichwetheziweyo ezingacacanga ezisebenza njengeendawo zokubalekela kwindlela yohlobo, zoyisa injongo yayo.

Ukuziphatha okuchuliweyo okukodwa: iinguqulelo ze-mypy phambi kwe-0.990 ngamanye amaxesha zingatsho uluhlu[olwaziwa] ngaphakathi kwaye banzi banzi kuluhlu[Nayiphi na] kwisabelo. I-Post-0.990, i-inference yaqiniswa, kodwa utshintsho lwaphula inani elimangalisayo leekhowudi zehlabathi zangempela ezazixhomekeke ekuziphatheni kokuvumela ngaphandle kokuyiqonda. Lo ngumxholo ophinda-phindayo — utshintsho kwintekelelo yesikhongozeli esingenanto luphakathi kolona hlobo luphazamisayo lohlaziyo lomkhangeli kuba iipateni zikho kuyo yonke indawo.

I-Pyright: I-Inference engqongqo kunye nodidi "olungaziwayo"

I-Pyright, iphuhliswe nguMicrosoft kunye nePylance enamandla kwiKhowudi yeVS, ithatha isiseko sefilosofi esahlukileyo. Kunokuba ubuyele umva ngokuthe cwaka ku-Nayiphi na, i-pyright iyahlula phakathi kweengaziwayo (uhlobo olungekaqinisekiswa okwangoku) kunye Nayiphi na (indlela yokuphuma ecacileyo kuhlobo lokujonga). Xa ubhala x = [] kwimo engqongqo ye-pyright, ithatha uluhlu [olungaziwa] kwaye ibike uxilongo, ukunyanzela ukuba unikeze isichasiselo.

I-Pyright iphinde ibe ndlongondlongo malunga ucutha ngaphakathi komda. Ukuba uyabhala:

  • x = [] ilandelwa ngux.append("molo") — i-pyright infers uluhlu[str]
  • x = [] ilandelwa ngux.append(1) emva koko x.append("molo") — i-pyright infers luhlu[int | str]
  • x = [] idlule ngokuthe ngqo kumsebenzi olindele uluhlu[int] — i-pyright infers uluhlu[int] ukusuka kumxholo wendawo yokufowuna
  • x = [] ibuyiswe kumsebenzi ngaphandle kohlobo lokubuyisela isichasiselo — i-pyright ibika imposiso kunokuqikelela

Olu ngqikelelo lwe-bidirectional (usebenzisa zombini usetyenziso olulandelayo kunye neentlobo ezilindelekileyo kwiindawo zokufowuna) yenza i-pyright ichaneke ngakumbi kune-mypy kwizikhongozeli ezingenanto. I-tradeoff yi-verbosity: i-pyright's mode engqongqo iflegi malunga 30-40% imiba engaphezulukwi-codebase eqhelekileyo engachazwanga xa kuthelekiswa nemo engqongqo ye-mypy, ngokohlalutyo oluvela kwiingxelo ezininzi ezivulekileyo zokufuduka. Kumaqela akha iinkqubo ezintsonkothileyo zokubuyela umva - yithi, iqonga elilawula iimodyuli ezidityanisiweyo ezingama-207 ezithatha iCRM, umvuzo, kunye nohlalutyo - ubungqongqo be-pyright bubamba ujongano olufihlakeleyo olungalunganga olunokuphoswa yingqiqo ethambileyo.

I-Pytype kunye nePyre: Iindlela eziHamba Kancinci

I-pytype kaGoogle ithatha eyona ndlela isebenzayo. Esikhundleni sokufuna izichasiselo okanye ubuyele ku-Nayiphi na, i-pytype isebenzisauhlalutyo lwenkqubo yonkeukulandelela indlela isitya esisetyenziswa ngayo kwimida yokusebenza. Ukuba udala uluhlu olungenanto kumsebenzi omnye kwaye ugqithisele komnye odibanisa ii-integers, i-pytype ingahlala ichaza uluhlu[int] ngaphandle kwezichasiselo konke konke. Le inference cross-function in computationally expensive — ipytype icotha kakhulu kune mypy or pyright on big codebases — kodwa ivelisa iipositives ezimbalwa zobuxoki kwikhowudi engachazwanga.

I-Pytype iphinda yazise ingqikelelo ye"iintlobo ezingaphelelanga" kwizikhongozeli ezingenanto. I-esanda kwakhiwa [] ifumana uhlobo oluyinxenye olucokiswa ngokuqhubekayo njengoko umkhangeli edibana nokusebenzisa okungakumbi. Oku kuhle ngokwengqiqo kodwa kunokuvelisa imiyalezo yemposiso ebhidayo xa udidi oluyinxenye lungakwazi ukusonjululwa ngokupheleleyo, njengaxa isikhongozeli esingenanto sityhutyha imisebenzi emininzi ngaphandle kokugcwaliswa.

💡 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 →

I-Meta's pyre, okwangoku, isondela kwindlela yokuziphatha ye-mypy kodwa ngokusilela okungqongqo. I-Pyre iphatha x = [] njengo uluhlu [olungaziwa] kwaye ifuna isichasiselo kwiimeko ezininzi. Apho ipyre izahlula khona kukuphathwa kwayoempty dictionary literals used as kwargs- ipateni eqhelekileyo kwizakhelo zewebhu. I-Pyre inengqiqo yecala elikhethekileyo ukukhupha iintlobo zesichazi-magama ukusuka kwimixholo yengxoxo yegama elingundoqo, ukunciphisa umthwalo wenkcazo kwisikhokelo-esinzima sekhowudi. Ngenxa yokuba uninzi lwezicelo zewebhu zala maxesha zibandakanya usetyenziso olunzima lokukhulula isichazi-magama ukulungiselela uqwalaselo kunye nokuphathwa kwesicelo, le pragmatism ihlawula imbuyekezo.

Impembelelo yeHlabathi yokwenyani: Xa i-Inference Divergence iluma

Umahluko phakathi kwabakhangeli bodidi unokubonakala ngathi ufundile de ube namava kubo kwisiseko sekhowudi yemveliso. Qwalasela ipateni eqhelekileyo kwizicelo zoshishino: ukuqaliswa kolwakhiwo lwedatha oluza luzaliswe ngokwemiqathango.

Ezona zikhongozeli ezingenanto eziyingozi ayizizo ezo zichwetheza iflegi yokujonga — zizo ezidlula ngokuthe cwaka ngohlobo oluqikelelweyoNayiphi na, evumela idatha engahambelaniyo ukuba iqokelele ngaphandle kwesilumkiso de umsebenzi osezantsi ungqubene ngexesha lokuqhuba ngeTypeError ephantse ingenzeki ukuyilandelela kwimvelaphi yayo.

Umzekelo wekhonkrithi: iqela kwi-fintech startup libike ukuchithaiintsuku ezintathu ukulungisa ingxaki yokuvelisaapho uluhlu olungenanto, oluqaliswe kumsebenzi wokucubungula intlawulo, luchazwe uluhlu [Nayiphi na] yi-mypy. Uluhlu bekufanele luqulathe idesimali izinto zeemali zemali, kodwa indlela yekhowudi yayifakela ixabiso le-float endaweni. Ingqikelelo kaMypy ethe cwaka yayivumela. I-bug ivele kuphela xa ukusondezwa kweempazamo kwi-arithmetic edadayo kubangele i-$0.01 umahluko kwibhetshi ye-invoyisi ezili-12,000. Ukuba bebesebenzise ipyright kwimo engqongqo, okanye bachaze ngokulula uluhlu olungenanto njengolu luluhlu[Idesimali], ibug ngeyibanjiwe ngexesha lophuhliso.

E-Mewayz, apho iqonga liqhuba i-invoyisi, ukubalwa kwentlawulo, kunye nohlalutyo lwemali kwi-akhawunti yomsebenzisi we-138,000+, olu hlobo lwe-gap yohlobo lokhuseleko aluyiyo ithiyori - ngumahluko phakathi kokuhlawulwa okuchanekileyo kunye nokubalwa kwakhona kweendleko. Ingqeqesho yokuchwetheza ngokungqongqo malunga nokuqaliswa kwesikhongozeli yenye yeendlela zobunjineli "zikruqulayo" ezithintela iziganeko ezichulumancisayo zemveliso.

IiNdlela eziNgcono zokuQalisa uMgqomo woKhuseleko

Nokuba loluphi uhlobo umkhangeli osetyenziswa liqela lakho, kukho amacebo abambekayo okuphelisa ukungaqondakali kwesikhongozeli esingenanto ngokupheleleyo. Injongo kukuba ungaze uthembele kwingqikelelo yezikhongozeli ezingenanto - yenza uhlobo lucace ukuze ikhowudi yakho iphatheke kubo bonke abakhangeli kwaye ikhuseleke kutshintsho lokuziphatha phakathi kweenguqulelo.

  1. Soloko uchaza izinto eziguquguqukayo zesikhongozeli esingenanto. Bhala iziphumo: uluhlu[int] = [] endaweni ye-iziphumo = []. Ixabiso elincinci le-verbosity alinakwa xa lithelekiswa nexesha lokulungisa eligciniweyo. Esi senzo sinye sisusa malunga ne-80% yemiba yesikhongozeli esingenanto.
  2. Sebenzisa imisebenzi yasefektri kwizikhongozeli ezintsonkothileyo. Endaweni yecache = {}, bhala umsebenzi ofana nedef make_cache () -> dict[str, list[UserRecord]]: buyisela {}. Uhlobo lwenkcazo yenkcazo lwenza ukuba uhlobo olucetywayo lube lukhuni kwaye luzibhale ngokwalo.
  3. Ukhetha abakhi abachwetheziweyo kunelithali kwiintlobo ezingabalulekanga. Bhala izinto: set[int] = set() kunokuxhomekeka kwingqikelelo yokuqonda eseti. Ku-defaultdict kunye I-Counter, soloko unikezela uhlobo lweparameter: izibalo: I-Counter[str] = i-Counter ().
  4. Qwalasela indlela engqongqo yomhloli wakho wohlobo lwekhowudi entsha. Zombini i-mypy kunye ne-pyright zixhasa ngefayile-nganye okanye uqwalaselo loluhlu ngalunye. Yenza ujongo olungqongqo kwiimodyuli ezintsha ngelixa ufuduka ngokuthe ngcembe ikhowudi yelifa. Oku kuthintela ukuqokelelana kwezikhongozeli ezitsha ezichwetheziweyo ngokungafihlisiyo.
  5. Yongeza uthelekiso lohlobo lomkhangeli kumbhobho weCI wakho. Ukuqhuba zombini i-mypy kunye ne-pyright kwi-codebase yakho kubamba ukwahluka kwangoko. Ukuba ipateni idlula enye icheki kodwa isilele kwenye, luphawu lokuba uhlobo alukho gca ngokwaneleyo.
  6. Umfanekiso Omkhulu: Uhlobo lokuJonga njengeQela lokuSebenza

    Intekelelo yesikhongozeli esingenanto ekugqibeleni yimicrocosm yomngeni omkhulu kwinkqubo yohlobo lwePython: ukuxinana phakathi koncedo nokhuseleko. Ifilosofi kaPython ethi "sonke singabantu abadala abavumayo" isebenza kakuhle kwiprototyping kunye neskripthi, kodwa iinkqubo zemveliso ezibonelela amawakawaka abasebenzisi zifuna iziqinisekiso ezinamandla. Into yokuba abahloli abane beentlobo ezinkulu bengavumelani kwinto esisiseko njengodidi lwe[] igxininisa ukuba i-ecosystem ye-Python yokuchwetheza isakhula.

    Amaqela obunjineli akha amaqonga antsonkothileyo - nokuba ulawula iimicroservices ezimbalwa okanye inkqubo edityanisiweyo enamakhulu eemodyuli ezidityanisiweyo ezifana neMewayz's business - ingcebiso esebenzayo ilula: ungathembeli kwintekelelo yezikhongozeli ezingenanto, khetha uhlobo lokukhangela kwaye luyiqwalasele ngokungqongqo, kwaye uphathe amanqakwana ohlobo njengamaxwebhu anokuthi afumaneke ngomatshini. Imizuzu emihlanu echithwe ubhala uluhlu[I-invoyisi] endaweni ye-[] iya kukugcina iiyure zokulungisa iimpazamo xa ikhowudi yekhowudi yakho ilinganisa.

    Njengokuba i-PEP 696 (ii-parameters zohlobo olungagqibekanga) kunye ne-PEP 695 (uhlobo lwe-syntax yeparameter) ziqhubeka nokufika kwiinguqulelo ezintsha zePython, i-ergonomics yokuchwetheza ngokucacileyo iya kuhlala iphucula. Umsantsa phakathi kwePython ethi "annotated" kunye ne "unnotated" iya kuncipha. Kodwa kude kube yiloo mini, iintlobo zesikhongozeli ezicacileyo zihlala zizezinye zeendlela eziphezulu ze-ROI kwi-toolkit yomphuhlisi wePython - uqeqesho oluncinci oluhlawula inzala edibeneyo kuyo yonke imodyuli, yonke i-sprint, kunye nokusasazwa kwemveliso.

    Yakha ishishini lakho OS namhlanje

    Ukusuka kwi-freelancers ukuya kwiiarhente, iMewayz inika amandla amashishini angama-138,000+ aneemodyuli ezidityanisiweyo ezingama-207. Qala simahla, uphucule xa ukhula.

    Dala iAkhawunti Yasimahla →

    Imibuzo Ebuzwa Rhoqo

    Kutheni ungachwethezi abakhangeli bavumelane ngohlobo loluhlu olungenanto?

    Xa ubhala `x = []`, isikhangeli sodidi kufuneka sithathe udidi ngaphandle kweengcebiso ezicacileyo. Abakhangeli abohlukeneyo basebenzisa iindlela ezahlukeneyo zokujonga: abanye baqikelela `uluhlu[Naluphi na]` (uluhlu lwayo nantoni na), ngelixa abanye benokuqikelela uhlobo oluthile oluthe ngqo kodwa olungachanekanga njengoluthi `uluhlu[Alukho]`. Oku kunqongophala komgangatho wendalo yonke kungenxa yokuba bengavumelani. Kwiiprojekthi ezisebenzisa i-checkers ezininzi, oku kungahambelani kunokuba yintloko enkulu, uhlalutyo oluqhekezayo kwisixhobo esinye esidlula kwesinye.

    Yeyiphi eyona ndlela ilula yokulungisa iimpazamo zesikhongozeli esingenanto?

    Esona sisombululo sithe ngqo kukubonelela ngohlobo olucacileyo lwesichasiselo. Endaweni yokuthi `uluhlu_lolwam = []`, bhala `uluhlu_lolwam: uluhlu[str] = []` ukubhengeza ngokucacileyo uhlobo olucetywayo. Oku kususa konke ukungaqondakali komkhangeli wohlobo, ukuqinisekisa ukuziphatha okufanayo kuzo zonke izixhobo ezahlukeneyo ezifana ne-mypy, i-Pyright, kunye ne-Pyre. Olu qheliselo luyacetyiswa kulo lonke uqalo lwesikhongozeli esingenanto ukunqanda iimpazamo zothelekelelo.

    Ndiziphatha njani izikhongozeli ezingenanto ngaphakathi kweenkcazelo zeklasi?

    Lo ngumba oqhelekileyo kuba amanqakwana angaphakathi kwiiklasi afuna ukuphathwa okukodwa. Kufuneka usebenzise `ukusuka __ikamva__ amanqakwana wokungenisa` ngaphandle okanye `ClassVar` inkcazo ukuba uluhlu lujolise ekubeni luphawu loyelelwano. Umzekelo, `udidi lwam udidi: my_list: ClassVar[uluhlu[str]] = []`. Ngaphandle koku, umkhangeli wodidi unokusokola ukuqikelela uhlobo oluchanekileyo, olukhokelela kwiimpazamo.

    Ngaba zikhona izixhobo zokunceda ukulawula le miba yokuchwetheza kwiiprojekthi ezinkulu?

    Ewe, abakhangeli bodidi oluphambili olunje ngePyright (amagunya ePylance kwiKhowudi yeVS) alungile ngakumbi ekuphatheni intelekelelo entsonkothileyo. Kwiikhowudi ezinkulu zekhowudi, iiplatifomu ezifana neMewayz (ezinikezela ngeemodyuli zokuhlalutya ze-207 nge-$ 19 / ngenyanga) zinokubonelela ngokunzulu, ukukhangela uhlobo oluhambelanayo kunye nokunceda ukunyanzeliswa kwezenzo zenkcazo kwiqela lakho lonke, ukunciphisa ukungahambelani okuxoxwa ngayo kwinqaku.

    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