Hacker News

Fakafehoanaki 'o e Python Fa'ahinga Checker: Inference 'o e koniteina 'ata'ataa

Ngaahi fakamatala

19 min read Via pyrefly.org

Mewayz Team

Editorial Team

Hacker News

Ko e hā ʻoku maumauʻi ai ʻe he ngaahi koniteina ʻataʻatā ʻa e ngaahi sivi faʻahinga Python — Pea mo e meʻa te ke lava ʻo fai fekauʻaki mo iá

Kuo matu'otu'a lahi 'a e sisitemi taipe'i fakautuutu 'a e Python talu mei hono fakafe'iloaki 'e he PEP 484 'a e ngaahi fakahinohino 'o e fa'ahinga 'i he 2015. 'I he 'aho ni, 'Oku fakafalala 'a e kau developers 'e laui miliona ki he ngaahi sivi fa'ahinga static ke ma'u 'a e fanga ki'i manupuna kimu'a pea nau toki taa'i 'a e ngaohi. Ka 'oku 'i ai ha tuliki fakapulipuli, fakatupu lotomamahi 'o e sisitemi fa'ahinga 'oku kei trips hake na'a mo e kau 'enisinia taukei: ko e ha 'a e fa'ahinga 'oku ma'u 'e ha koniteina 'ata'ataa? Ko e taimi 'oku ke tohi ai 'a e x = [] 'o 'ikai ha fakamatala, kuo pau ke mate'i 'e ho'o sivi fa'ahinga — pea 'oku mate'i kehekehe 'a e kau sivi kehekehe. 'Oku fakatupu 'e he divergence ko 'eni 'a e ngaahi palopalema mo'oni ki he ngaahi timi 'oku nau tauhi 'a e ngaahi codebases lalahi, 'a ia 'e lava ke 'asi ai 'a e fetongi pe fakataha'i 'o e ngaahi sivi fa'ahinga 'o e ngaahi fehalaaki ta'e'amanekina 'e laungeau 'i he po.

'Oku veteki 'e he fakamatala ko 'eni 'a e founga 'oku tokanga'i ai 'e he ngaahi me'a lalahi 'e fa 'o e Python 'a e fa'ahinga — mypy, pyright, pytype, mo e pyre — 'a e inference 'o e koniteina 'ata'ataa, ko e ha 'oku nau ta'e lototaha ai, pea ko e ha 'a e ngaahi founga 'aonga te ke lava 'o ngaue'aki ke tohi 'a e fa'ahinga-malu 'o e Python tatau ai pe pe ko ho'o fili tooling.

Ko e Palopalema Tefito: Ko e Ngaahi Koniteina 'Oku 'Ikai ha Me'a 'Oku 'Ikai Mahino Fakanatula

Fakakaukau ki he laine ta'efakatupu maumau ko 'eni 'o e Python: ngaahi ola = []. Ko e ngaahi olá ko ha lisi[int]? Ko ha lisi[str]? Ko ha lisi[tuʻutuʻuni[str, Ha]]? Ka 'ikai ha toe context, 'oku 'ikai ha founga mo'oni ke 'ilo'i. 'Oku 'ikai ke tokanga 'a e taimi lele 'o e Python — 'oku heterogeneous 'a e ngaahi lisi 'i he natula — ka 'oku fie ma'u 'e he kau sivi 'o e fa'ahinga static ke vahevahe ha fa'ahinga sima ki he ngaahi kehekehe kotoa pe ke fai 'enau ngaue. 'Oku fakatupu 'e he me'a ni ha fepakipaki tefito 'i he vaha'a 'o e fe'unu'aki 'o e Python mo e ngaahi fakapapau 'oku feinga 'a e 'analaiso static ke 'omi.

'Oku fakatahataha'i 'a e palopalema mo e ngaahi tikisinale mo e ngaahi seti. Ko ha {} 'ata'ataa 'oku mo'oni 'a e parsed ko ha dict, 'ikai ko ha seti, 'a ia 'oku ne tanaki atu 'a e 'ikai mahino fakasintekisi 'i 'olunga 'i he 'ikai mahino 'o e levolo 'o e fa'ahinga. Pea ko e ngaahi koniteina nested — fakakaukau defaultdict(lisi) pe ngaahi ola = {k: [] ki he k 'i he ngaahi kī} — teke 'a e ngaahi misini inference ki honau ngaahi fakangatangata. Kuo fakatupulaki 'e he fa'ahinga takitaha 'o e sivi 'a 'ene heuristics, pea 'oku mahu'inga ange 'a e ngaahi faikehekehe 'i he tokolahi taha 'o e kau developers 'oku nau 'ilo'i.

'I he ngaahi sisitemi ngaohi'anga 'oku nau ngaue'aki 'a e ngaahi kavenga ngaue mo'oni — pe ko ha CRM 'oku ne tokanga'i 'a e ngaahi lekooti 'o e kasitomaa, ko ha module invoicing 'oku ne fakatupu 'a e ngaahi me'a laine, pe ko ha paipa 'analaiso 'oku ne fakatahataha'i 'a e ngaahi metrics — 'oku 'asi ma'u pe 'a e ngaahi koniteina 'ata'ataa ko e ngaahi founga 'o e initialization. Ko hono ma'u hala 'enau ngaahi fa'ahinga 'oku 'ikai ke ne fakatupu pe 'a e ngaahi fakatokanga linter; 'e lava ke ne fakapulipuli'i 'a e ngaahi bugs mo'oni 'oku nau 'alu holo 'o a'u ki he taimi lele.

Mypy: Fakatoloi Fakakaukau Mo e Fakakaukau Fakapulipuli

Mypy, ko e motu'a taha mo lahi taha hono 'ave 'o e Python type checker, 'oku ne to'o ha founga 'oku 'ikai fu'u lenient ki he ngaahi koniteina 'ata'ataa. 'I he taimi 'oku ne fetaulaki ai mo e x = [] 'i he 'atakai 'o e ngaue, 'oku ne feinga ke toloi 'a e tu'utu'uni 'o e fa'ahinga pea infer 'a e fa'ahinga 'o e 'elemeniti mei hono faka'aonga'i kimui ange. Kapau te ke tohi 'a e x = [] pea muimui 'i he x.append(42), 'e faka'uhinga'i 'e he mypy 'a e lisi[int]. Ko e founga ko 'eni "kau" 'oku ngaue faka'ohovale lelei ki he ngaahi keisi hangatonu 'a ia 'oku populated 'a e koniteina 'i loto 'i he 'atakai tatau.

Kaekehe, 'oku liliu lahi 'a e 'ulungaanga 'o e mypy 'o fakatatau ki he context mo e ngaahi tu'unga fefeka. 'I he module 'o e 'atakai (kouti 'o e tu'unga 'i 'olunga), pe 'i he taimi 'oku paasi ai 'a e koniteina ki ha ngaue kehe kimu'a pea toki populated, 'Oku fa'a to 'a e mypy ki mui ki he lisi[Ha]. 'I lalo 'i he fuka --fefeka, 'Oku fakatupu 'e he me'a ni ha fehalaaki, ka 'i he founga 'o e default 'oku fakalongolongo 'ene paasi. 'Oku 'uhinga 'eni 'e lava ke tanaki 'e he ngaahi timi 'oku nau lele mypy 'o 'ikai ha founga fefeka 'a e ngaahi koniteina implicitly-typed 'oku nau ngaue ko e ngaahi hatches hola mei he sisitemi fa'ahinga, 'o ikuna'i hono taumu'a.

Ko e taha 'o e ngaahi 'ulungaanga fakapulipuli tautautefito: mypy ngaahi liliu kimu'a 'i he 0.990 'e infer 'i he taimi 'e ni'ihi lisi[Ta'e'iloa] 'i loto pea toki fakalahi ki he lisi[Ha] 'i he ngaue. Post-0.990, na'e tightened 'a e inference, ka na'e maumau'i 'e he liliu ha tokolahi faka'ohovale 'o e codebases 'o e mamani mo'oni na'e fakafalala ki he 'ulungaanga fakangofua 'o 'ikai ke ne 'ilo'i ia. Ko ha kaveinga 'eni 'oku toutou hoko — 'oku kau 'a e ngaahi liliu ki he inference 'o e koniteina 'ata'ataa 'i he ngaahi fakafo'ou 'o e checker 'o e fa'ahinga fakamoveuveu lahi taha koe'uhi ko e ngaahi sipinga 'oku fu'u ubiquitous.

Pyright: Fakakaukau'i fefeka mo e Fa'ahinga "Ta'e'iloa"

Pyright, fakatupulaki 'e he Microsoft mo e fakaivia 'o e Pylance 'i he VS Code, 'oku ne to'o ha tu'unga fakafilosofia kehe 'aupito. Kae 'ikai ke to fakalongolongo ki mui ki he Ha, 'Oku fakafaikehekehe'i 'e he pyright 'a e Ta'e'iloa (ko ha fa'ahinga 'oku te'eki ke fakapapau'i) mo e Ha (ko ha opt-out mahino 'o e sivi'i 'o e fa'ahinga). Ko e taimi 'oku ke tohi ai 'a e x = [] 'i he founga fefeka 'o e pyright, 'oku ne faka'uhinga'i 'a e lisi[Ta'e'iloa] pea lipooti ha fakatotolo, 'o fakamālohi'i koe ke ke 'oatu ha fakamatala.

'Oku toe fakatupu 'ita ange 'a e Pyright fekau'aki mo efakapuliki 'i loto 'i he 'atakai. Kapau te ke tohi:

    x = [] muimui atu 'i he x.append("malo") — 'oku faka'uhinga'i 'e he pyright 'a e lisi[str] x = [] pea muimui atu 'i he x.fakapiki(1) pea x.fakapiki("malo") — 'oku faka'uhinga'i 'e he pyright 'a e lisi[int | mālohi
  • x = [] paasi hangatonu ki ha ngaue 'oku 'amanaki ki he lisi[int] — 'oku faka'uhinga'i 'e he pyright 'a e lisi[int] mei he tu'unga 'o e ui-saiti
  • x = [] fakafoki mai mei ha ngaue 'oku 'ikai ha fakamatala 'o e fa'ahinga fakafoki — 'oku lipooti 'e he pyright ha fehalaaki kae 'ikai ko e mate'i

Ko e inference bidirectional ko 'eni ('o faka'aonga'i 'a e fakatou'osi 'a e faka'aonga'i kimui ange mo e ngaahi fa'ahinga 'oku 'amanaki mei he ngaahi saiti ui) 'oku ne 'ai 'a e pyright 'oku 'iloa 'oku tonu ange ia 'i he mypy ki he ngaahi koniteina 'ata'ataa. Ko e tradeoff ko e verbosity: pyright 'a e founga fefeka 'o e ngaahi fuka fakafuofua ki he 30-40% lahi ange 'a e ngaahi me'a 'i ha codebase angamaheni 'oku 'ikai ke fakamatala'i 'i hono fakafehoanaki ki he founga fefeka 'o e mypy, 'o fakatatau ki he 'analaiso mei ha ngaahi lipooti 'o e hiki 'o e ma'u'anga fakamatala 'oku fakaava. Ki he ngaahi timi 'oku nau langa 'a e ngaahi sisitemi backend faingata'a — talamai, ko ha tu'unga 'oku ne pule'i 'a e 207 modules fehokotaki 'oku ne 'ufi'ufi 'a e CRM, totongi, mo e analytics — 'oku ma'u 'e he fefeka 'o e pyright 'a e ngaahi fefeka 'o e interface fakapulipuli 'e mole 'a e inference lenient.

Pytype mo e Pyre: Ko e Ngaahi Hala 'oku Si'isi'i ange 'a e Fononga

Ko e pytype 'a e Google mahalo 'oku ne to'o 'a e founga faka'aonga'i lahi taha. Kae 'ikai ke fie ma'u 'a e ngaahi fakamatala pe tō ki mui ki he Ha, 'Oku faka'aonga'i 'e he pytype 'a e 'analaiso 'o e polokalama kakato ke muimui'i 'a e founga 'oku faka'aonga'i ai ha koniteina 'i he ngaahi ngata'anga 'o e ngaue. Kapau te ke fa'u ha lisi 'ata'ataa 'i ha ngaue 'e taha pea paasi ia ki ha taha 'oku ne fakalahi 'a e ngaahi fika kakato, 'e lava ke fa'a infer 'e he pytype 'a e lisi[int] 'o 'ikai ha ngaahi fakamatala 'i he me'a kotoa pe. Ko e inference ko 'eni 'o e kolosi-ngaue 'oku fakamole lahi 'a e pytype — 'oku fu'u tuai ange 'a e pytype 'i he mypy pe pyright 'i he ngaahi codebases lalahi — ka 'oku ne fakatupu 'a e ngaahi fakakaukau loi 'oku si'isi'i ange 'i he code 'oku 'ikai ke fakamatala'i.

'Oku toe fakafe'iloaki 'e he Pytype 'a e fakakaukau 'o e "ngaahi fa'ahinga fakakonga" ki he ngaahi koniteina 'ata'ataa. Ko ha fo'ou na'e fa'u [] 'oku ne ma'u ha fa'ahinga konga 'oku fakalakalaka hono fakalelei'i 'i he fetaulaki 'a e checker mo hono faka'aonga'i lahi ange. 'Oku fakakaukau 'eni 'oku faka'ofo'ofa ka 'e lava ke ne fakatupu 'a e ngaahi fekau hala fakatupu puputu'u 'i he taimi 'oku 'ikai lava ke solova kakato ai 'a e fa'ahinga konga, hange ko e taimi 'oku tafe ai ha koniteina 'ata'ataa 'i ha ngaahi ngaue 'o 'ikai ha taimi 'oku populated.

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

Ko e pyre 'a Meta, lolotonga ia, 'oku hews ofi ange ki he 'ulungaanga 'o e mypy ka 'oku 'i ai 'a e ngaahi defaults fefeka ange. 'Oku ngaue'aki 'e Pyre 'a e x = [] ko e lisi[ta'e'iloa] pea 'oku fie ma'u 'a e fakamatala 'i he lahi taha 'o e ngaahi tu'unga. Ko e feitu'u 'oku fakafaikehekehe'i ai 'e he pyre ia 'i he'ene tokanga'i 'o e ngaahi lea 'ata'ataa 'o e tikisinale 'oku faka'aonga'i ko e kwargs — ko ha sipinga angamaheni 'i he ngaahi fa'unga 'o e uepi. Pyre 'oku 'i ai 'a e logic makehe-keisi ke infer 'a e ngaahi fa'ahinga tikisinale mei he ngaahi tu'unga 'o e fakakikihi 'o e lea mahu'inga, fakasi'isi'i 'a e kavenga 'o e annotation 'i he codebases 'o e framework-mamafa. Koe'uhi ko e lahi taha 'o e ngaahi polokalama uepi fakaonopooni 'oku kau ai hono faka'aonga'i lahi 'o e unpacking 'o e tikisinale ki he configuration mo e tokanga'i 'o e kole, 'oku totongi 'e he pragmatism ko 'eni 'a e ngaahi vahenga.

Uesia 'o e Mamani Mo'oni: 'I he taimi 'oku u'u ai 'e he Inference Divergence

Ko e ngaahi faikehekehe 'i he vaha'a 'o e ngaahi sivi fa'ahinga 'e ngali fakaako kae 'oua kuo ke a'usia kinautolu 'i ha codebase 'o e ngaohi. Fakakaukau ki ha founga angamaheni 'i he ngaahi polokalama pisinisi: initializing ha fokotu'utu'u 'o e fakamatala 'oku ma'u 'e he populated conditionally.

Ko e ngaahi koniteina 'ata'ataa fakatu'utamaki taha 'oku 'ikai ko e ngaahi fa'ahinga 'o e kau sivi 'o e fuka — ko kinautolu 'oku nau fakalongolongo 'o paasi mo ha inferred Ha fa'ahinga fa'ahinga, 'o faka'ata 'a e fakamatala 'oku 'ikai ke fe'unga ke tanaki ta'e fakatokanga kae 'oua kuo 'i ai ha ngaue 'i lalo 'oku 'ikai lava ke 'i he taimi lele mo ha Type>s back is ke . tupuʻanga.

Ko ha fakatātā pau: naʻe lipooti ʻe ha timi ʻi ha kamataʻanga fintech ʻa hono fakamoleki ʻo e ʻaho ʻe tolu ʻi hono fakaleleiʻi ha ʻisiū ʻo e ngaohiʻanga koloa ʻa ia naʻe fakaʻuhingaʻi ai ha lisi ʻataʻatā, ʻoku ʻuluaki ʻi ha ngaue ʻo e ngaueʻaki ʻo e totongi, ko e lisi[Ha] ʻe he mypy. Na'e totonu ke 'i he lisi 'a e ngaahi me'a Tesimale ki he ngaahi lahi 'o e pa'anga, ka na'e fakapipiki 'e ha hala fakakouti 'a e ngaahi mahu'inga 'o e float 'i hono fetongi. Naʻe fakaʻatā fakalongolongo ia ʻe he fakakaukau anga-malū ʻa Mypy. Na'e toki 'asi mai 'a e bug 'i he taimi na'e fakatupu ai 'e he ngaahi fehalaaki 'o e rounding 'i he fika 'o e float ha faikehekehe 'o e $0.01 'i ha kulupu 'o e ngaahi inivoisi 'e 12,000. Kapau na'a nau ngaue'aki 'a e pyright 'i he founga fefeka, pe faka'ilonga'i pe 'a e lisi 'ata'ataa ko e lisi[Tesimale], na'e mei ma'u 'a e bug 'i he taimi fakalakalaka.

'I he Mewayz, 'a ia 'oku fakahoko ai 'e he peletifoomu 'a e invoicing, ngaahi fakafuofua 'o e totongi, mo e ngaahi 'analaiso fakapa'anga 'i he 138,000+ 'akauni 'o e kau faka'aonga'i, 'Oku 'ikai ko e fa'ahinga 'o e 'ava ko 'eni 'o e fa'ahinga-malu 'a e teolosia — ko e faikehekehe ia 'i he vaha'a 'o e lele totonu 'o e totongi mo e recalculations fakamole lahi. Ko e akonaki'i fefeka 'o e taipe 'o takatakai 'i he kamata'anga 'o e koniteina ko e taha ia 'o e ngaahi founga faka'enisinia "fakapikopiko" 'oku ne ta'ofi 'a e ngaahi me'a fakafiefia 'oku hoko 'i he ngaohi.

Ngaahi Founga Lelei Taha ki hono Kamata'i 'o e Koniteina Malu'i

Tatau ai pe pe ko e ha e fa'ahinga checker 'oku faka'aonga'i 'e ho'o timi, 'Oku 'i ai ha ngaahi founga pau ke fakangata 'a e ambiguity 'o e koniteina 'ata'ataa 'o faka'aufuli. Ko e taumu'a ke 'oua na'a teitei fakafalala ki he inference ki he ngaahi koniteina 'ata'ataa — 'ai ke mahino 'a e fa'ahinga koe'uhi ke lava 'o to'oto'o ho'o code 'i he ngaahi sivi kotoa pe pea malu mei he ngaahi liliu 'o e 'ulungaanga inference 'i he vaha'a 'o e ngaahi liliu.

  1. Faka'ilonga'i ma'u pe 'a e ngaahi kehekehe 'o e koniteina 'ata'ataa. Tohi'i 'a e ngaahi ola: lisi[int] = [] kae 'ikai ko e ngaahi ola = []. 'Oku si'isi'i 'a e fakamole verbosity 'i hono fakafehoanaki ki he taimi debugging 'oku fakahaofi. Ko e founga ngaue 'e taha ko 'eni 'oku ne fakangata 'a e fakafuofua ki he 80% 'o e ngaahi me'a 'o e inference 'o e koniteina 'ata'ataa.
  2. Ngaue'aki 'a e ngaahi ngaue 'o e fale ngaohi'anga koloa ki he ngaahi koniteina fihi. Ko e fakamatala 'o e fa'ahinga fakafoki 'oku ne 'ai 'a e fa'ahinga 'oku fakataumu'a ke ta'e-mahino mo fakatohi 'iate ia pe.
  3. Sai'ia ange 'i he ngaahi constructors kuo taipe'i 'i he ngaahi literals ki he ngaahi fa'ahinga 'oku 'ikai mahu'inga. Tohi'i 'a e ngaahi me'a: seti[int] = seti() kae 'ikai ko e fakafalala ki he fakakaukau 'o e mahino 'o e seti. Ki he defaultdict mo e Lau, 'oatu ma'u pe 'a e fa'ahinga fakangatangata: lau: Lau[str] = Lau().
  4. Fakalelei'i 'a e founga fefeka 'o ho'o type checker ki he code fo'ou. 'Oku fakatou poupou'i 'e he mypy mo e pyright 'a e faile pe fakahinohino 'o e fakahokohoko. Faka'ata 'a e vakai'i fefeka 'i he ngaahi modules fo'ou lolotonga 'oku hiki fakautuutu 'a e code tukufakaholo. 'Oku ta'ofi 'e he me'a ni 'a e tanaki 'o e ngaahi koniteina fo'ou 'oku faka'ilonga'i-taipe.
  5. Tānaki atu 'a e fakafehoanaki 'o e sivi 'o e fa'ahinga ki ho'o paipa CI. Ko hono lele'i 'o e mypy mo e pyright 'i ho'o codebase 'oku ne ma'u vave 'a e kehekehe 'o e inference. Kapau 'oku paasi ha sipinga 'i ha sivi 'e taha ka 'oku 'ikai ke lava 'a e taha, ko e faka'ilonga ia 'oku 'ikai ke mahino fe'unga 'a e fa'ahinga.

Ko e 'Ata Lahi Ange: Siaki 'o e Fa'ahinga ko ha Ngaue Fakatimi

Ko e inference 'o e koniteina 'ata'ataa 'oku iku ia ko ha microcosm 'o ha pole lahi ange 'i he sisitemi fa'ahinga 'o e Python: 'a e fepakipaki 'i he vaha'a 'o e fakafiemalie mo e malu. 'Oku ngaue faka'ofo'ofa 'a e filosofia 'a e Python 'o e "'oku tau fakangofua kotoa 'a e kakai lalahi" ki he prototyping mo e ngaahi tohi, ka 'oku fie ma'u 'e he ngaahi sisitemi ngaohi 'oku nau tauhi 'a e kau faka'aonga'i 'e lauiafe ha ngaahi fakapapau'i malohi ange. Ko e mo'oni 'oku 'ikai ke lototaha 'a e kau sivi fa'ahinga lalahi 'e toko fa ki ha me'a 'oku tefito 'o hange ko e fa'ahinga 'o e [] 'oku ne fakamamafa'i 'oku kei matu'otu'a 'a e 'ekosisitemi taipe 'a e Python.

Ki he ngaahi timi 'enisinia langa 'a e ngaahi tu'unga faingata'a — pe 'oku ke pule'i ha nima 'o e microservices pe ko ha sisitemi fakatahataha'i mo e ngaahi modules fehokotaki 'e laungeau hange ko e pisinisi 'a e Mewayz OS — 'oku hangatonu 'a e fale'i 'aonga: 'oua 'e fakafalala ki he inference ki he ngaahi koniteina 'ata'ataa mo e configureno it, fili ha fa'ahinga treckerat mo e . ngaahi tohi 'oku hoko 'oku lava ke fakamo'oni'i 'e he misini. Ko e miniti ʻe nima ʻoku fakamoleki ʻi hono tohi ʻo e lisi[ʻInivoisi] kae ʻikai ko e [] te ne fakahaofi koe ʻi ha ngaahi houa ʻo e fakatonutonu ʻi he taimi ʻoku fakafuofuaʻi ai hoʻo codebase.

'I he PEP 696 (ngaahi fakangatangata 'o e fa'ahinga 'o e default) mo e PEP 695 (fa'ahinga 'o e syntax 'o e fakangatangata) ke tu'uta 'i he ngaahi liliu fo'ou ange 'o e Python, 'e kei fakalakalaka 'a e ergonomics 'o e taipe'i mahino. 'E fakapuliki 'a e 'ava 'i he vaha'a 'o e "faka'ilonga'i" mo e "ta'efaka'ilonga'i" Python. Ka 'o a'u ki he 'aho ko ia, 'Oku kei hoko pe 'a e ngaahi fa'ahinga koniteina mahino ko e taha 'o e ngaahi founga ngaue ma'olunga taha-ROI 'i he toolkit 'a e developer 'o e Python — ko ha ki'i ako 'oku ne totongi 'a e tupu fakatahataha 'i he module kotoa pe, sprint kotoa pe, mo e deployment kotoa pe 'o e ngaohi'anga koloa.

Langa Ho'o OS Pisinisi he 'aho ni Mei he kau ngaue tau'ataina ki he ngaahi kautaha, 'Oku fakaivia 'e he Mewayz 'a e ngaahi pisinisi 'e 138,000+ mo e 207 modules fakataha'i. Kamata ta'etotongi, fakalelei'i 'i he taimi 'oku ke tupu ai.

3b82f6; lanu: # fff; fakafonu: 10px 24px; kau'āfonua-letiusi: 6px; tohi-teuteu: 'ikai ha taha; mata'itohi-toe lau: 60"
Fa'ahinga FAQ: "Fehu'i","hingoa":"Langa ho'o Pisinisi OS he 'aho ni","fa'ahinga tali tali": kau ngaue tau'ataina ki he ngaahi kautaha, 'Oku fakaivia 'e he Mewayz 'a e ngaahi pisinisi 'e 138,000+ mo e ngaahi module fakatahataha'i 'e 207 Kamata ta'etotongi, fakalelei'i 'i he taimi 'oku ke tupulaki ai."}}]}.

Ngaahi Fehuʻi ʻoku Faʻa ʻEke

Ko e hā ʻoku ʻikai lava ai ʻe he kau sivi taipe ʻo lototaha ki he faʻahinga ʻo ha lisi ʻataʻatā?

Ka ke tohi `x = []`, kuo pau ke infer 'e he tokotaha sivi fa'ahinga ha fa'ahinga 'o 'ikai ha ngaahi fakahinohino mahino. 'Oku faka'aonga'i 'e he kau sivi kehekehe 'a e ngaahi founga kehekehe: 'oku infer 'e he ni'ihi 'a e `list[Any]` (ko ha lisi 'o ha me'a pe), lolotonga ia 'e lava ke infer 'e he ni'ihi ha fa'ahinga pau ange ka 'oku hala hange ko e `list[None]`. Ko e ‘ikai ha tu‘unga fakamāmani lahi ko ení ko e ‘uhinga ia ‘oku nau ta‘efelotoi aí. Ki he ngaahi poloseki 'oku nau faka'aonga'i 'a e ngaahi sivi lahi, 'e lava ke hoko 'a e ta'efe'unga ko 'eni ko ha mamahi 'ulu lahi, motuhi 'a e 'analaiso 'i he me'angaue 'e taha 'oku paasi 'i he taha.

Ko e hā ʻa e founga faingofua taha ke fakaleleiʻi ʻaki ʻa e ngaahi fehalaaki ʻi he koniteina ʻataʻatā?

Ko e fakalelei'anga hangatonu taha ko hono 'oatu ha fakamatala mahino 'o e fa'ahinga. Kae 'ikai ko e `eku_lisi = []`, tohi `eku_lisi: lisi[str] = []` ke fakaha mahino 'a e fa'ahinga 'oku fakataumu'a ki ai. 'Oku to'o 'e he me'a ni 'a e ambiguity kotoa pe ki he checker 'o e fa'ahinga, fakapapau'i 'a e 'ulungaanga tu'uma'u 'i he ngaahi me'angaue kehekehe hange ko e mypy, Pyright, mo e Pyre. 'Oku fokotu'u atu 'a e founga ko 'eni ki he ngaahi kamata'anga 'o e koniteina 'ata'ataa kotoa pe ke ta'ofi 'a e ngaahi fehalaaki 'o e inference.

'E anga fefe ha'aku tokanga'i 'a e ngaahi koniteina 'ata'ataa 'i loto 'i he ngaahi faka'uhinga 'o e kalasi?

Ko e me'a angamaheni 'eni he 'oku fie ma'u 'e he ngaahi fakamatala 'i loto 'i he ngaahi kalasi ha tokanga'i makehe. Kuo pau ke ke faka'aonga'i 'a e `mei he __kaha'u__ 'omi 'a e ngaahi fakamatala` 'omi pe ko ha fakamatala `ClassVar` kapau 'oku fakataumu'a 'a e lisi ke hoko ko ha 'ulungaanga 'o e kalasi. Hange ko 'eni, `kalasi 'ekuKalasi: 'eku_lisi: KalasiVar[lisi[str]] = []`. Ka 'ikai 'eni, 'e faingata'a'ia 'a e tokotaha sivi fa'ahinga ke faka'uhinga'i totonu 'a e fa'ahinga, 'o iku ai ki he ngaahi fehalaaki.

'Oku 'i ai ha ngaahi me'angaue ke tokoni ki hono pule'i 'o e ngaahi me'a ko 'eni 'o e taipe 'i he ngaahi poloseki lalahi?

'Io, 'Oku tautautefito ki he lelei 'a e ngaahi sivi fa'ahinga fakalakalaka hange ko e Pyright ('a ia 'oku ne fakaivia 'a e Pylance 'i he VS Code) 'i hono tokanga'i 'o e inference faingata'a. Ki he codebases lalahi, ngaahi tu'unga hange ko e Mewayz ('oatu 'a e 207 modules 'analaiso ki he $19/mahina) 'e lava ke ne 'omi 'a e loloto ange, sivi'i 'o e fa'ahinga tu'uma'u ange mo tokoni ke fakamālohi'i 'a e ngaahi founga 'o e annotation 'i he kotoa 'o ho'o timi, mitigating 'a e ngaahi ta'efe'unga 'oku alea'i 'i he fakamatala.

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