Hacker News

Whakatauritenga Kaitirotiro Momo Python: Ipu Putua Inference

Nga korero

15 min read Via pyrefly.org

Mewayz Team

Editorial Team

Hacker News

He aha nga Ipu Putua ka pakaru nga Kaitirotiro Momo Python — Me He aha Ka Taea e Koe

Kua tino pakari te punaha patopato a Python mai i te tukunga a PEP 484 i nga tohu momo tohu i te tau 2015. I tenei ra, e hia miriona nga kaiwhakawhanake e whakawhirinaki ana ki nga kaitaki momo pateko hei hopu i nga pepeke i mua i te mahi. Engari tera ano tetahi kokonga ngawari, pouri o te momo punaha e haere tonu ana ki nga miihini mohio: he aha te momo kei roto i te ipu kau? Ina tuhia e koe x = [] me te kore he tuhipoka, me matapae to kaitaki momo — a he rereke nga whakaaro a nga kaitaki rereke. Ko tenei rereketanga ka puta he tino raruraru mo nga roopu e pupuri ana i nga turanga waehere nui, ka taea e te huri, te whakakotahi ranei nga kaitaki momo ka puta nga rau o nga hapa ohorere i te po.

Ka wehewehe tenei tuhinga me pehea e whaa nga kaitaki momo Python matua e wha — mypy, pyright, pytype, me te pyre — ki te hapai i te whakatauranga ipu kau, he aha i kore ai e whakaae, me nga rautaki whaihua ka taea e koe te whakamahi ki te tuhi Python haumaru-momo ahakoa he aha taau taputapu.

Ko te Raruraru Matua: Ko nga Ipu Putua he Porehua tonu

Whakaarohia tenei rarangi kino o Python: nga hua = []. Ko nga hua he rārangi[int]? He rārangi[str]? He rārangi[dict[str, Any]]? Ki te kore he horopaki taapiri, karekau he huarahi hei mohio. Ko te wa whakahaere Python karekau e aro - he rerekee nga rarangi - engari ko nga kaitaki momo pateko me tohu he momo raima ki ia taurangi hei mahi i a raatau mahi. Na tenei ka puta he raruraru taketake i waenga i te ngawari hihiko o Python me nga whakapumautanga e ngana ana te tātaritanga pateko ki te whakarato.

Ka whakahuihui te rapanga ki nga papakupu me nga huinga. Ko tetahi {} putua kua poroa hei tohu, ehara i te huihui, e tāpiri ana i te rangirua wetereo ki runga ake o te rangirua taumata-momo. Me nga ipu kohanga — whakaaro defaultdict(rarangi) or huatanga = {k: [] mo te k i roto i nga taviri} — pana nga miihini whakatau ki o raatau rohe. Kua whakawhanakehia e ia kaitaki momo ona ake heuristics, a he nui ake nga rereketanga i ta te nuinga o nga kaiwhakawhanake e mohio ana.

I roto i nga punaha whakangao e tukatuka ana i nga taumahatanga tino mahi — ahakoa he CRM e whakahaere ana i nga rekoata a nga kaihoko, he kōwae nama e whakaputa tuemi raina, he inenga whakahiato paipa tātari ranei — ka puta nga ipu putua hei tauira arawhiti. Ko te he o a raatau momo karekau e whakaputa i nga whakatupato whakamohiotanga; ka taea e ia te huna i nga pepeke pono ka paheke ki te wa whakahaere.

Mākui: Whakatauhia te Whakataunga me te Whakakorea Tetahi

Ko Mypy, te kaitirotiro momo Python tawhito rawa atu, e tino whakamahia ana, he ahua ngawari ki nga ipu kore. Ka tutaki ki x = []i te whānuitanga mahi, ka ngana ki tewhakaroa i te whakatau momome te whakatau i te momo huānga mai i te whakamahinga o muri. Mena ka tuhia e koe x = [] ka whai x.append(42), ka whakatauhia e mypy rārangi[int]. He tino pai te mahi o tenei rautaki "hono" mo nga keehi ngawari kei te noho te ipu i roto i te whānuitanga kotahi.

Heoi, he tino rerekee te whanonga o mypy i runga i te horopaki me nga tautuhinga whakakaha. I te whānuitanga kōwae (waehere taumata-runga), ka tukuna ranei te ipu ki tetahi atu mahi i mua i te whakakiihia, ka hoki mai a mypy ki rārangi [Any]. I raro i te haki --strict, ka puta he hapa, engari i te aratau taunoa ka pahemo wahangu. Ko te tikanga ka taea e nga kapa e whakahaere ana i te mypy kaore he aratau tino kaha ki te whakaemi i te maha o nga ipu kua paopao noa hei pao mawhiti mai i te punaha momo, ka hinga i tana kaupapa.

Tetahi whanonga ngawari: ko nga putanga mypy i mua i te 0.990 ka whakatauhia i etahi wa rarangi [Kaore i te Mohiotia] ki roto, ka whakawhanui ki te rarangi [Any] mo te taumahi. I muri mai i te 0.990, i whakakahahia te whakatau, engari na te huringa i pakaru te maha o nga turanga o te ao tuuturu e whakawhirinaki ana ki te whanonga whakaae me te kore e mohio. He kaupapa auau tenei — ko nga huringa ki te whakatauranga ipu putua kei roto i nga whakamohoatanga kaitaki momo whakararuraru na te mea kei nga waahi katoa nga tauira.

Pyright: Hukarere Tino me te Momo "Kaore e Mohiotia"

Ko Pyright, i whakawhanakehia e Microsoft me te whakakaha i a Pylance i roto i te Waehere VS, he rereke te ahua o te whakaaro. Engari ka hoki whakamuri ki Tetahi, ka wehewehe te pyright i waenga i Kaore i te Mohiotia (he momo kaore ano kia whakatauhia) me Any (he whakaputanga-a-waho mo te tirotiro momo). Ina tuhia e koe x = [] i roto i te aratau tino tika a pyright, ka whakatauhia e ia rarangi[Kaore i te mohiotia] ka whakaatu i tetahi tātaritanga, e akiaki ana koe ki te tuku korero.

He kaha ake ano a Pyright ki te whakaiti i roto i te whānuitanga. Mena ka tuhi koe:

  • x = [] whai muri mai x.append("hello") — pyright infers rarangi[str]
  • x = [] whai muri x.append(1) ka x.append("hello") — pyright infers list[int | str
  • x = [] i whakawhiti tika ki tetahi mahi e tatari ana rarangi[int] — pyright infers list[int] from the call-site context
  • x = [] i hoki mai mai i tetahi mahi kaore he momo tuhipoka whakahoki — ka ripoatahia e pyright he hapa, kaua ki te matapae

Ko tenei tohu-a-rua (ma te whakamahi i muri mai me nga momo e tumanakohia ana mai i nga waahi waea) ka tino tika ake te pyright i te mypy mo nga ipu kau. Ko te tauhokohoko he kupu korero: ko nga haki aratau tino kaha a pyright e tata ana30-40% atu nga takei runga i te papawaewae karekau i tohuhia i whakaritea ki te aratau tino a mypy, e ai ki te tātaritanga mai i te maha o nga purongo hekenga puna tuwhera. Mo nga kapa e hanga ana i nga punaha whakamuri uaua — me kii, he papa whakahaere e 207 nga waahanga hono hono i roto i te CRM, te utu utu, me te tātaritanga — ka mau te kaha o te pyright i nga momo atanga ngawari ka ngaro te whakaaro ngawari.

Pytype and Pyre: Ko nga Rori Iti Te Haere

Ko te pytype a Google pea te huarahi tino pai. Engari ki te tono tuhipoka, ki te hoki whakamuri ki Tetahi, ka whakamahia e te pytype te tātari papatono-katoaki te whai i te whakamahinga o te ipu puta noa i nga rohe mahi. Mena ka waihangahia e koe he rarangi putua i roto i tetahi mahi ka tukuna ki tetahi atu e apiti ana i nga tauoti, ka taea e te pytype te whakatau i te rarangi[int]kare he tuhipoka. He nui te utu o tenei whakatau whakawhiti-mahi - he tino puhoi ake te pytype i te mypy, pyright ranei i runga i nga turanga waehere nui - engari he iti ake nga hua pai teka i runga i te waehere kore korero.

Ko te Pytype ano he whakauru i te ariā o "nga momo wahanga" mo nga ipu kau. Ko te [] katahi ano ka hangahia ka whiwhi i tetahi momo waahanga ka whakapai haere i te wa e pa ana te kaitaki. He huatau tenei o te ariā engari ka taea te whakaputa i nga karere hapa pohehe ka kore e taea te whakatau katoa te momo waahanga, penei i te wa e rere ana te ipu putua i roto i nga mahi maha me te kore e kapi.

💡 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 te ahi a Meta, ka tata atu ki te whanonga a mypy engari he kaha ake nga taunoa. Ka noho a Pyre ki a x = [] hei rārangi[kāore i te mōhiotia] ā, me whai whakamārama i te nuinga o ngā horopaki. Ko te waahi ka rereke te pyre ko tana whakahaere nga kupu papakupu kau e whakamahia ana hei kwargs — he tauira noa i roto i nga anga tukutuku. He arorau take motuhake a Pyre hei whakatau i nga momo papakupu mai i nga horopaki tohenga kupu matua, e whakaiti ana i te taumahatanga o nga korero i roto i nga turanga-waewae-taimaha. I te mea ko te nuinga o nga tono tukutuku hou he nui te whakamahi i te wetewete papakupu mo te whirihora me te whakahaere tono, ka whai hua tenei whakaaro.

Panga-Ao-Tuturu: Ina Ngau Ngau Rerekētanga Whakatau

Ko nga rereketanga i waenga i nga kaitaki momo he ahua matauranga kia mohio ra ano koe ki roto i te turanga waehere whakaputa. Whakaarohia he tauira noa i roto i nga tono pakihi: arawhiti i te hanganga raraunga ka noho herenga.

Ko nga ipu putua tino kino ehara i te haki kaitaki momo — ko nga mea e pahemo ana me te momo momo Tetahi, ka taea te kohi raraunga hotokore me te kore whakatupato kia tukinga ra ano tetahi mahi whakararo i te wa whakahaere me te TypeError kare e taea te hoki ki tona takenga.

He tauira raima: i kii tetahi roopu i te tiimata fintech i whakapauae toru nga ra ki te patuiro i tetahi take whakangaoi reira he rarangi kau, i arawhitihia i roto i te mahi tukatuka utu, i whakatauhia heirarangi[Any]e mypy. Ko te tikanga kei roto i te rarangi he Te iranga ahanoa mo nga moni moni, engari he ara waehere kei te taapiri i nga uara mapunga. Ko te whakaaro ngawari a Mypy i whakaae puku. I puta noa te pepeke i te wa i puta mai ai nga hapa whakaawhiwhi i te taunga rewa i te $0.01 te rereketanga i runga i te roopu 12,000 nama. Mena i whakamahia e ratou te pyright i roto i te aratau tino kaha, i tohu noa ranei i te rarangi kau hei rarangi[Itekau], kua mau te pepeha i te wa whanaketanga.

I Mewayz, kei reira nga mahi a te turanga mo te nama nama, nga tatauranga utu, me te tātari putea puta noa i te 138,000+ kaute kaiwhakamahi, ehara tenei momo momo-haumaru i te whakaaro - ko te rereketanga i waenga i nga utu utu tika me nga tatauranga utu utu. Ko te ako mo te patopato mo te arawhiti ipu tetahi o nga mahi miihini "hoha" hei aukati i nga maiki whakangao whakaihiihi.

Nga Tikanga Pai mo te Whakatairanga Ipu Whakaara

Ahakoa he aha te momo kaitaki e whakamahia ana e to roopu, he rautaki raima hei whakakore katoa i te rangirua o nga ipu. Ko te whainga kia kaua rawa e whirinaki ki te whakatauki mo nga ipu putua - kia marama te momo kia kawe to waehere puta noa i nga kaitaki katoa, kia kore ai e pa ki nga huringa whanonga whakatau i waenga i nga putanga.

  1. Tuhia nga taurangi ipu putua i nga wa katoa. Tuhia hua: list[int] = [] hei utu mo hua = []. He iti noa te utu o te kupu kupu iti ka whakaritea ki te wa patuiro kua tiakina. Ma tenei mahi kotahi ka whakakore i te 80% o nga take whakatauranga ipu kau.
  2. Whakamahia nga mahi wheketere mo nga ipu matatini. Engari i keteroki = {}, tuhia he mahi penei def make_cache() -> dict[str, list[UserRecord]]: return {}. Ko te momo whakamohiotanga e whakaatu ana i te momo e hiahiatia ana kia maamaa me te tuhi whaiaro.
  3. Me pai ake ki nga kaihanga kua patohia i runga i nga kupu kupu mo nga momo kore-iti. Tuhia tuemi: set[int] = set() kaua ki te ti'aturi i runga i te whakatau i te whakatau. Mo te taunoa me te Kaitatau, whakarato tonu te momo tawhā: tatau: Kaitatau[str] = Kaitatau().
  4. Whirihorahia te aratau tino kaitaki momo mo te waehere hou. Ka tautokohia e te mypy me te pyright te whirihoranga mo ia-kōnae, mo ia whaiaronga ranei. Whakahohehia te arowhai kaha ki nga waahanga hou i te wa e heke haere ana te waehere tuku iho. Ka aukati tenei i te kohikohinga o nga ipu hou kua patopato.
  5. Taapirihia te whakataurite kaitaki momo ki to raina paipa CI. Ma te whakahaere i te mypy me te pyright i runga i to papawaehere ka mau wawe te rereketanga o te whakatau. Mena ka tukuna e tetahi tauira tetahi kaitaki engari ka rahua tetahi atu, he tohu tera kaore i te tino marama te momo.

Te Pikitia Nui: Momo Takitaki hei Parakatihi Rōpū

Ko te whakatauranga ipu putua he moroiti o te wero nui i roto i te punaha momo a Python: te raruraru i waenga i te waatea me te haumaru. Ko te kaupapa whakaaro a Python mo "kei te whakaae katoa matou ki nga pakeke" he pai te mahi mo te tauira tauira me nga tuhinga, engari ko nga punaha whakaputa e mahi ana i nga mano o nga kaiwhakamahi me kaha ake nga taurangi. Ko te mea e wha nga kaitaki momo nui e kore e whakaae ki tetahi mea penei i te momo [] e tohu ana kei te pakari tonu te rauwiringa kaiao patopato Python.

Mo nga roopu miihini e hanga ana i nga papaa uaua — ahakoa kei te whakahaere koe i te iti o nga ratonga miihini, he punaha whakauru ranei me nga rau o nga waahanga honohono penei i te OS pakihi a Mewayz - he maamaa te tohutohu: kaua e whakawhirinaki ki te whakatau mo nga ipu kau, kowhiria he kaitaki momo me te whirihora i te reira, me te whakarite i nga momo tuhipoka hei tuhinga ka taea e te miihini. Ko nga meneti e rima i pau ki te tuhi rārangi [Invoice] hei utu mo te [] ka whakaora koe i nga haora o te patuiro i te wa e tauine ana to turanga waehere.

Na te PEP 696 (te momo tawhā taunoa) me te PEP 695 (momo tawhā wetereo) kei te haere tonu ki roto i nga putanga Python hou ake, ka pai ake te ergonomics o te patopato marama. Ka whakawhāitihia te āputa i waenga i te Python "annotated" me "unnotated". Engari tae noa ki taua ra, ka noho tonu nga momo ipu maamaa tetahi o nga tikanga ROI teitei rawa atu i roto i te kete taputapu a te kaiwhakawhanake Python — he ako iti e utu moni huamoni puta noa i ia kōwae, ia sprint, me ia whakangao.

Hangahia to OS Pakihi i tenei ra

Mai i nga kaikorero korekore ki nga tari tari, ka whakahaerea e Mewayz nga umanga 138,000+ me te 207 kōwae whakauru. Tīmata kore utu, whakapai ake ina tipu koe.

Waihanga Pūkete Koreutu →

Patai Auau

He aha e kore e taea e nga kaitaki pato te whakaae ki te momo rarangi putua?

Ka tuhi koe i te `x = []`, me whakatau e te kaitaki momo tetahi momo me te kore tohu tohu. He rereke nga rautaki ka whakamahia e nga kaitaki rereke: ko etahi ka kii i te `rarangi[Any]` (he rarangi o nga mea katoa), ko etahi ka whakatau he momo momo ake engari he he penei i te `rarangi[Kore]`. Ko tenei kore o te paerewa ao te take i kore ai ratou e whakaae. Mo nga kaupapa e whakamahi ana i nga kaitaki maha, ko tenei koretake ka waiho hei mahunga nui, ka pakaru te tātaritanga i tetahi taputapu ka haere ki tetahi atu.

He aha te huarahi ngawari ki te whakatika hapa ipu?

Ko te otinga tino maamaa ko te whakarato i tetahi momo tuhipoka. Engari i te `my_list = []`, tuhia `my_list: list[str] = []` ki te whakapuaki i te momo e hiahiatia ana. Ma tenei ka whakakore i te rangirua katoa mo te kaitaki momo, me te whakarite kia rite te whanonga puta noa i nga taputapu rereke penei i te mypy, Pyright, me Pyre. E taunakitia ana tenei mahi mo nga whakaurunga ipu putua katoa hei aukati i nga hapa whakatau.

Me pehea taku hapai i nga ipu putua i roto i nga whakamaramatanga o te karaehe?

He take noa tenei na te mea ko nga korero o roto o nga karaehe me whakahaere motuhake. Me whakamahi koe i te `mai i __future__ kawemai korero` kawemai, i te `ClassVar` tuhipoka mena ko te rarangi hei huanga akomanga. Hei tauira, `akomanga MyClass: my_list: ClassVar[rarangi[str]] = []`. Ki te kore tenei, ka uaua pea te kaitaki momo ki te whakatau tika i te momo, ka puta he hapa.

He taputapu hei awhina i enei take patopato i roto i nga kaupapa nunui?

Ae, he tino pai nga kaitaki momo matatau penei i a Pyright (e kaha ana a Pylance i roto i te Waehere VS) ki te whakahaere i te whakatauira uaua. Mo nga turanga waehere nui, ka taea e nga papaaapapa penei i a Mewayz (e tuku ana i nga waahanga tātari 207 mo te $19/marama) he hohonu ake, he rite tonu te arowhai momo me te awhina ki te whakakaha i nga tikanga whakamohiotanga puta noa i to roopu katoa, hei whakaiti i nga taupatupatu i korerohia i roto i te tuhinga.

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