Txoj kev mus rau ntaus ntawv 4 lab kab ntawm Python code. Ntu 3

Peb nthuav qhia rau koj mloog qhov thib peb ntawm kev txhais lus ntawm cov ntaub ntawv hais txog txoj hauv kev uas Dropbox coj thaum siv hom kev kuaj xyuas rau Python code.

Txoj kev mus rau ntaus ntawv 4 lab kab ntawm Python code. Ntu 3

β†’ Yav dhau los qhov chaw: thawj zaug ΠΈ ob

Mus txog 4 lab kab ntawm kev ntaus code

Lwm qhov kev sib tw loj (thiab qhov kev txhawj xeeb thib ob feem ntau ntawm cov neeg tshawb fawb sab hauv) tau nce tus lej code them los ntawm hom tshev hauv Dropbox. Peb tau sim ntau txoj hauv kev los daws qhov teeb meem no, los ntawm ib txwm loj hlob qhov loj me ntawm cov ntawv sau codebase los tsom rau pab pawg mypy kev siv zog ntawm qhov zoo li qub thiab dynamic automated type inference. Thaum kawg, nws zoo li tsis muaj lub tswv yim yeej yooj yim, tab sis peb muaj peev xwm ua tiav kev loj hlob sai hauv qhov ntim ntawm cov lus piav qhia los ntawm kev sib txuas ntau txoj hauv kev.

Yog li ntawd, peb qhov loj tshaj plaws Python repository (nrog backend code) muaj ze li ntawm 4 lab kab ntawm cov lus sau tseg. Txoj haujlwm ntawm kev ntaus ntawv zoo li qub tau ua tiav hauv kwv yees li peb xyoos. Mypy tam sim no txhawb ntau hom kev tshaj tawm cov cai uas ua rau nws yooj yim dua los saib xyuas kev ua tiav ntawm kev ntaus ntawv. Tshwj xeeb, peb tuaj yeem tsim cov ntawv ceeb toom ntawm cov cai nrog tsis meej pem hauv hom, xws li, piv txwv li, siv hom lus meej Any hauv cov lus piav qhia uas tsis tuaj yeem txheeb xyuas tau, lossis nrog rau tej yam xws li kev xa cov tsev qiv ntawv thib peb uas tsis muaj hom annotations. Raws li ib feem ntawm txoj haujlwm los txhim kho qhov tseeb ntawm hom kev kuaj xyuas hauv Dropbox, peb tau pab txhawb kev txhim kho hom lus txhais (hu ua stub files) rau qee qhov nrov qhib cov tsev qiv ntawv hauv lub hauv paus chaw khaws ntaub ntawv Python. hom ntawv.

Peb tau siv (thiab ua qauv hauv PEPs tom ntej) cov yam ntxwv tshiab ntawm hom kab ke uas tso cai rau ntau hom meej rau qee tus qauv Python tshwj xeeb. Ib qho piv txwv tseem ceeb ntawm qhov no yog TypeDict, uas muab hom rau JSON-zoo li phau ntawv txhais lus uas muaj cov txheej txheem ruaj khov ntawm cov hlua khi, txhua tus nqi ntawm nws tus kheej hom. Peb yuav txuas ntxiv nthuav cov hom system. Peb cov kauj ruam tom ntej yuav yog los txhim kho kev txhawb nqa rau Python tus lej muaj peev xwm.

Txoj kev mus rau ntaus ntawv 4 lab kab ntawm Python code. Ntu 3
Tus naj npawb ntawm cov kab lus piav qhia: server

Txoj kev mus rau ntaus ntawv 4 lab kab ntawm Python code. Ntu 3
Tus lej ntawm cov kab lus piav qhia: tus neeg siv khoom

Txoj kev mus rau ntaus ntawv 4 lab kab ntawm Python code. Ntu 3
Tag nrho cov kab ntawm cov lus piav qhia

Nov yog cov ntsiab lus ntawm cov yam ntxwv tseem ceeb ntawm cov khoom uas peb tau ua kom nce tus lej ntawm cov lus sau tseg hauv Dropbox:

Cov lus piav qhia nruj. Peb maj mam nce qhov yuav tsum tau ua rau qhov nruj ntawm kev sau cov lej tshiab. Peb pib nrog cov lus qhia linter uas tau hais kom ntxiv annotations rau cov ntaub ntawv uas twb muaj qee cov lus piav qhia. Tam sim no peb xav tau hom annotations hauv cov ntaub ntawv Python tshiab thiab hauv cov ntaub ntawv uas twb muaj lawm.

Ntaus ntawv ceeb toom. Peb xa cov ntawv tshaj tawm txhua lub limtiam rau cov qib ntawm kev ntaus hauv lawv cov lej thiab muab cov lus qhia txog qhov yuav tsum tau sau tseg ua ntej.

Popularization ntawm mypy. Peb tham txog mypy ntawm cov xwm txheej thiab tham nrog pab pawg los pab lawv pib nrog hom annotations.

Kev xaiv tsa. Peb tshawb xyuas cov neeg siv ib ntus txhawm rau txheeb xyuas cov teeb meem loj. Peb npaj tau mus deb heev hauv kev daws cov teeb meem no (txawm tias tsim cov lus tshiab kom ceev mypy!).

Kev ua tau zoo. Peb tau txhim kho kev ua tau zoo ntawm mypy los ntawm kev siv daemon thiab mypyc. Qhov no tau ua kom du tawm qhov tsis yooj yim uas tshwm sim thaum lub sijhawm annotation txheej txheem, thiab txhawm rau kom muaj peev xwm ua haujlwm nrog ntau tus lej.

Kev koom ua ke nrog cov neeg kho. Peb tau tsim cov cuab yeej los txhawb kev khiav mypy hauv cov neeg kho uas nrov ntawm Dropbox. Qhov no suav nrog PyCharm, Vim thiab VS Code. Qhov no yooj yim heev rau cov txheej txheem ntawm annotating lub chaws thiab xyuas nws functionality. Cov hom kev ua no feem ntau yog thaum sau cov lej uas twb muaj lawm.

Kev soj ntsuam zoo li qub. Peb tsim ib lub cuab yeej los txiav txim siab ua haujlwm kos npe siv cov cuab yeej tshuaj ntsuam zoo li qub. Cov cuab yeej no tuaj yeem ua haujlwm tsuas yog hauv cov xwm txheej yooj yim xwb, tab sis nws tau pab peb ua kom peb cov cai hom kev pab cuam yam tsis muaj kev siv zog ntau.

Kev them nyiaj yug rau cov tsev qiv ntawv thib peb. Ntau ntawm peb cov haujlwm siv SQLAlchemy toolkit. Nws siv qhov zoo ntawm qhov muaj peev xwm ntawm Python uas PEP 484 hom tsis tuaj yeem ua qauv ncaj qha. Peb, raws li PEP 561, tsim cov ntaub ntawv stub sib raug thiab tau sau ib lub plugin rau mypy (qhib qhov chaw), uas txhim kho SQLAlchemy kev txhawb nqa.

Kev nyuaj peb ntsib

Txoj kev mus rau 4 lab kab ntawm kev ntaus code tsis yog ib txwm yooj yim rau peb. Ntawm txoj kev no peb ntsib ntau lub qhov dej thiab ua ntau yam yuam kev. Nov yog qee qhov teeb meem uas peb ntsib. Peb cia siab tias kev qhia txog lawv yuav pab lwm tus kom tsis txhob muaj teeb meem zoo sib xws.

Cov ntaub ntawv ploj lawm. Peb pib peb txoj haujlwm los ntawm kev txheeb xyuas cov ntaub ntawv me me xwb. Ib yam dab tsi tsis suav nrog hauv cov ntaub ntawv no tsis tau kuaj xyuas. Cov ntaub ntawv tau ntxiv rau hauv daim ntawv scanning thaum thawj cov lus qhia tau tshwm sim hauv lawv. Yog tias ib yam dab tsi raug xa tawm los ntawm ib qho module nyob sab nraum qhov kev txheeb xyuas, ces peb tau tham txog kev ua haujlwm nrog cov txiaj ntsig zoo li Any, uas tsis tau sim txhua. Qhov no ua rau muaj qhov tsis zoo ntawm kev ntaus ntawv raug, tshwj xeeb tshaj yog nyob rau theem pib ntawm kev tsiv teb tsaws. Txoj hauv kev no tau ua haujlwm zoo li tsis txaus ntseeg txog tam sim no, txawm hais tias qhov xwm txheej ib txwm yog tias ntxiv cov ntaub ntawv rau qhov kev tshuaj xyuas qhia pom cov teeb meem hauv lwm qhov chaw ntawm codebase. Qhov phem tshaj plaws, thaum ob qhov chaw sib cais ntawm cov cai raug sib koom ua ke, nyob rau hauv uas, ntawm nws tus kheej ntawm ib leeg, cov hom twb tau kuaj xyuas, nws tau pom tias hom ntawm cov cheeb tsam no tsis sib haum nrog ib leeg. Qhov no ua rau qhov yuav tsum tau ua ntau yam kev hloov pauv rau cov lus piav qhia. Saib rov qab tam sim no, peb paub tias peb yuav tsum tau ntxiv cov tsev qiv ntawv tseem ceeb rau mypy qhov chaw kuaj xyuas sai dua. Qhov no yuav ua rau peb txoj haujlwm ntau dua kev kwv yees.

Annotating qub code. Thaum peb pib, peb muaj txog 4 lab kab ntawm Python code uas twb muaj lawm. Nws tau pom tseeb tias kev sau tag nrho cov cai no tsis yog ib txoj haujlwm yooj yim. Peb tau tsim ib lub cuab yeej hu ua PyAnnotate uas tuaj yeem sau cov ntaub ntawv raws li kev xeem khiav thiab tuaj yeem ntxiv hom annotations rau koj cov cai raws li cov ntaub ntawv khaws tseg. Txawm li cas los xij, peb tsis tau pom ib qho tshwj xeeb tshaj plaws ntawm cov cuab yeej no. Kev sib sau cov ntaub ntawv tau qeeb, thiab tau txais cov lus piav qhia feem ntau xav tau ntau phau ntawv hloov kho. Peb xav txog kev khiav cov cuab yeej no tau txais txhua lub sijhawm peb tshuaj xyuas cov lej, lossis sau cov ntaub ntawv raws li kev txheeb xyuas qee qhov me me ntawm cov kev thov hauv network tiag tiag, tab sis txiav txim siab tsis ua vim tias ob qho tib si muaj kev pheej hmoo dhau.

Raws li qhov tshwm sim, nws tuaj yeem raug sau tseg tias feem ntau ntawm cov cai tau sau tseg los ntawm nws cov tswv. Txhawm rau coj cov txheej txheem no mus rau qhov raug, peb npaj cov ntawv qhia txog cov qauv tseem ceeb tshwj xeeb thiab cov haujlwm uas yuav tsum tau sau tseg. Piv txwv li, nws yog ib qho tseem ceeb uas yuav tsum tau muab hom annotations rau lub tsev qiv ntawv module uas siv ntau pua qhov chaw. Tab sis ib qho kev pabcuam qub uas tau hloov nrog ib qho tshiab tsis yog qhov tseem ceeb ntxiv rau kev sau ntawv. Peb kuj tseem tab tom sim siv cov kev txheeb xyuas zoo li qub los tsim cov ntawv sau rau cov lej qub.

Cyclic imports. Saum toj no, kuv tham txog cyclic ntshuam (cov "dependency tangles"), lub hav zoov uas ua rau nws nyuaj rau ceev mypy. Peb kuj yuav tsum tau ua hauj lwm hnyav los ua mypy txhawb nqa txhua hom lus uas yog tshwm sim los ntawm cov kev hloov pauv no. Peb nyuam qhuav ua tiav ib txoj haujlwm tseem ceeb rov tsim dua tshiab uas kho feem ntau ntawm mypy cov teeb meem hais txog kev xa khoom tuaj. Cov teeb meem no tau tshwm sim los ntawm cov hnub thaum ntxov ntawm txoj haujlwm, rov qab los ntawm Alore, cov lus kawm uas qhov project mypy tau tsom mus rau qhov qub. Alore syntax ua rau nws yooj yim los daws cov teeb meem nrog cyclic ntshuam commands. Niaj hnub no mypy tau txais qee qhov kev txwv los ntawm nws qhov ua ntej, kev siv lub siab yooj yim (uas yog qhov zoo rau Alore). Python ua rau kev ua hauj lwm nrog ncig ntshuam nyuaj, feem ntau vim hais tias cov lus tsis meej. Piv txwv li, kev ua haujlwm ua haujlwm tuaj yeem txhais tau hom npe. Mypy tsis yog ib txwm muaj peev xwm ntes tau tej yam zoo li no kom txog thaum feem ntau ntawm cov ntshuam lub voj tau ua tiav. Tsis muaj qhov tsis meej pem hauv Alore. Cov kev txiav txim siab tsis zoo tau ua nyob rau theem pib ntawm kev txhim kho kab ke tuaj yeem nthuav tawm qhov tsis txaus siab rau tus programmer ntau xyoo tom qab.

Cov txiaj ntsig: txoj kev mus rau 5 lab kab ntawm cov lej thiab cov qab ntug tshiab

Qhov project mypy tau los ntev heev - los ntawm cov qauv ua ntej mus rau qhov system uas tswj 4 lab kab ntawm cov lej ntau lawm. Raws li mypy evolved, Python hom lus qhia tau tus qauv. Niaj hnub no, lub ecosystem muaj zog tau tsim nyob ib ncig ntawm kev ntaus ntawv Python code. Nws muaj qhov chaw rau kev txhawb nqa tsev qiv ntawv, nws muaj cov cuab yeej pabcuam rau IDEs thiab cov neeg kho, nws muaj ntau hom kev tswj hwm, txhua tus muaj nws qhov zoo thiab qhov tsis zoo.

Txawm hais tias hom kev txheeb xyuas twb tau muab rau ntawm Dropbox, kuv ntseeg tias peb tseem nyob rau hnub ntxov ntawm kev ntaus ntawv Python code. Kuv xav tias hom kev tshuaj xyuas thev naus laus zis yuav txuas ntxiv txhim kho thiab txhim kho.

Yog tias koj tsis tau siv hom kev tshuaj xyuas hauv koj qhov project Python loj, ces paub tias tam sim no yog lub sijhawm zoo heev los pib txav mus rau kev ntaus ntawv zoo li qub. Kuv tau tham nrog cov uas tau hloov pauv zoo ib yam. Tsis muaj leej twg khuv xim nws. Kev kuaj xyuas hom ua rau Python yog hom lus uas zoo dua rau kev tsim cov haujlwm loj dua li "Python li niaj zaus."

Nyob zoo nyeem! Koj puas siv hom kev kuaj xyuas hauv koj cov haujlwm Python?

Txoj kev mus rau ntaus ntawv 4 lab kab ntawm Python code. Ntu 3
Txoj kev mus rau ntaus ntawv 4 lab kab ntawm Python code. Ntu 3

Tau qhov twg los: www.hab.com

Ntxiv ib saib