Ụzọ iji pịnye akara koodu Python 4 nde. Akụkụ 1

Taa, anyị na-ewetara gị akụkụ mbụ nke ntụgharị asụsụ ihe gbasara otu Dropbox si emeso ụdị njikwa koodu Python.

Ụzọ iji pịnye akara koodu Python 4 nde. Akụkụ 1

Dropbox na-ede ọtụtụ ihe na Python. Ọ bụ asụsụ anyị na-eji nke ukwuu, ma maka ọrụ azụ azụ yana ngwa ndị ahịa desktọpụ. Anyị na-ejikwa Go, TypeScript na Rust eme ọtụtụ ihe, mana Python bụ asụsụ anyị kacha mkpa. N'ịtụle ọnụ ọgụgụ anyị, ma anyị na-ekwu maka ọtụtụ nde ahịrị koodu Python, ọ tụgharịrị na ụdị koodu ahụ siri ike gbagwojuru anya nghọta ya wee malite imetụta nrụpụta ọrụ. Iji belata nsogbu a, anyị ebidola iji mypy jiri nwayọ gbanwee koodu anyị gaa n'ụdị nlele static. Nke a bụ ma eleghị anya usoro nlele ụdị nleba anya kacha ewu ewu maka Python. Mypy bụ ọrụ mepere emepe, ndị nrụpụta ya na-arụ ọrụ na Dropbox.

Dropbox bụ otu n'ime ụlọ ọrụ izizi mejuputa ụdị nlele static na koodu Python n'ọ̀tụ̀tụ̀ a. A na-eji Mypy na ọtụtụ puku ọrụ ụbọchị ndị a. Ngwá ọrụ a na-apụghị ịgụta ọnụ, dị ka ha na-ekwu, "nwalere n'agha." Anyị abịala ogologo oge iji ruo ebe anyị nọ ugbu a. N'ụzọ ahụ, enwere ọtụtụ mmemme na-agabeghị nke ọma yana nnwale ndị dara ada. Nke a na post kpuchiri akụkọ ihe mere eme nke static ụdị ịlele na Python, site na nkume mmalite ya dị ka akụkụ nke ọrụ nyocha m, ruo taa, mgbe ụdị ịlele na ụdị hinting aghọwo ihe a na-ahụkarị maka ọtụtụ ndị mmepe na-ede na Python. A na-akwado usoro ndị a ugbu a site na ọtụtụ ngwaọrụ dịka IDE na ndị nyocha koodu.

Gụọ akụkụ nke abụọ

Kedu ihe kpatara nlele ụdị ji dị mkpa?

Ọ bụrụ na ị jirila Python pịnye n'ike n'ike, ị nwere ike inwe mgbagwoju anya maka ihe kpatara na-enwe ọgba aghara dị na mpịpị static na mypy n'oge na-adịbeghị anya. Ma ọ bụ ma eleghị anya, Python na-amasị gị kpọmkwem n'ihi na ọ na-ede ya dị ike, na ihe na-eme na-akpasu gị iwe. Isi ihe dị na uru nke mpịnye static bụ ọnụ ọgụgụ nke ngwọta: ka ọrụ gị na-abawanye, ka ị na-adaberekwu na mpịnye static, na n'ikpeazụ, ka ị ga-achọkwu ya.

Ka e were ya na otu ọrụ ruru ọtụtụ iri puku ahịrị, wee pụta na ọtụtụ ndị mmemme na-arụ ọrụ na ya. N'ileghachi anya na ọrụ yiri nke ahụ, dabere na ahụmahụ anyị, anyị nwere ike ịsị na ịghọta koodu ya ga-abụ isi ihe na-eme ka ndị mmepe na-arụpụta ihe. Enweghị nkọwapụta ụdị, ọ nwere ike isi ike ịchọpụta, dịka ọmụmaatụ, ụdị arụmụka ị ga-agafe na ọrụ, ma ọ bụ ụdị ọrụ nwere ike ịlaghachi. Nke a bụ ajụjụ ndị na-esikarị ike ịza na-ejighi nkọwapụta ụdịdị:

  • Ọrụ a nwere ike ịlaghachi None?
  • Gịnị kwesịrị ịbụ arụmụka a? items?
  • Gịnị bụ àgwà ụdị id: int ọ bụ, str, ma ọ bụ ikekwe ụfọdụ ụdị omenala?
  • Arụmụka a kwesịrị ịbụ ndepụta? Ọ ga-ekwe omume ịfefe ya tuple?

Ọ bụrụ na i leba anya n'ụdị snippet koodu a na-akọwapụta ma gbalịa ịza ajụjụ ndị yiri ya, ọ ga-apụta na nke a bụ ọrụ kachasị mfe:

class Resource:
    id: bytes
    ...
    def read_metadata(self, 
                      items: Sequence[str]) -> Dict[str, MetadataItem]:
        ...

  • read_metadata anaghị alọghachi None, ebe ọ bụ na ụdị nloghachi abụghị Optional[…].
  • Arụmụka items bụ usoro ahịrị. Enweghị ike ịkọwa ya na enweghị usoro.
  • Àgwà id bụ eriri bytes.

N'ime ụwa zuru oke, mmadụ ga-atụ anya na a ga-akọwa ụdị aghụghọ niile dị na akwụkwọ arụnyere (docstring). Ma ahụmahụ na-enye ọtụtụ ihe atụ nke eziokwu ahụ bụ na a naghị ahụkarị akwụkwọ ndị dị otú ahụ na koodu nke ị ga-arụ ọrụ. Ọbụna ma ọ bụrụ na akwụkwọ ndị dị otú ahụ dị na koodu ahụ, mmadụ enweghị ike ịdabere na ya zuru oke. Akwụkwọ a nwere ike ịbụ nke edoghị anya, ezighi ezi, yana meghee nghọtahie. N'ime nnukwu otu ma ọ bụ nnukwu ọrụ, nsogbu a nwere ike ịdị oke njọ.

Ọ bụ ezie na Python dị elu na mmalite ma ọ bụ nke etiti nke ọrụ, n'oge ụfọdụ ọrụ na-aga nke ọma na ụlọ ọrụ ndị na-eji Python nwere ike iche ajụjụ dị mkpa ihu: "Ànyị kwesịrị idegharị ihe niile n'asụsụ a na-edepụta nke ọma?".

Ụdị usoro nyocha dị ka mypy na-edozi nsogbu dị n'elu site n'inye onye mmepụta asụsụ asụsụ maka ịkọwa ụdị, yana site na ịlele ụdị nkwupụta ahụ dabara na mmejuputa mmemme (na, nhọrọ, site na ịlele maka ịdị adị ha). N'ozuzu, anyị nwere ike ịsị na usoro ndị a na-etinye n'aka anyị ihe dị ka akwụkwọ ejiri nlezianya nyochaa.

Ojiji nke usoro ndị dị otú ahụ nwere uru ndị ọzọ, ma ha adịlarị kpam kpam na-abaghị uru:

  • Usoro nlele ụdị nwere ike ịchọpụta ụfọdụ mperi (ma ọ bụghị obere). Otu ihe atụ bụ mgbe ha chefuru ịhazi uru None ma ọ bụ ụfọdụ ọnọdụ pụrụ iche ọzọ.
  • A na-eme ka nhazi koodu dị mfe nke ukwuu n'ihi na usoro nlele ụdị na-abụkarị ihe ziri ezi gbasara koodu kwesịrị ịgbanwe. N'otu oge ahụ, ọ dịghị mkpa ka anyị nwee olileanya maka mkpuchi koodu 100% na ule, nke, n'ọnọdụ ọ bụla, anaghị emekarị. Ọ dịghị mkpa ka anyị banye n'ime omimi nke nchịkọta nchịkọta iji chọpụta ihe kpatara nsogbu ahụ.
  • Ọbụlagodi na nnukwu oru ngo, mypy nwere ike na-eme ụdị nlele zuru oke na obere nkeji. Na mmezu nke ule na-ewekarị iri iri nke sekọnd ma ọ bụ ọbụna nkeji. Usoro nlele ụdị na-enye onye mmemme nzaghachi ngwa ngwa ma nye ya ohere ịrụ ọrụ ya ngwa ngwa. Ọ dịghịzi mkpa ide ihe na-esighị ike ma sie ike idowe ule otu nke na-eji mkparị na patches dochie ezigbo ụlọ ọrụ naanị iji nweta nsonaazụ koodu ngwa ngwa.

IDE na ndị ndezi dị ka PyCharm ma ọ bụ Visual Studio Code na-eji ike ụdị nkọwa na-enye ndị mmepe mmecha koodu, ngosiputa mperi, yana nkwado maka nrụpụta asụsụ a na-ejikarị. Ma ndị a bụ naanị ụfọdụ uru dị n'ịpịpị. Maka ụfọdụ ndị mmemme, ihe a niile bụ isi arụmụka na-akwado ide. Nke a bụ ihe na-erite uru ozugbo emechara ya. Usoro ojiji a maka ụdị anaghị achọ usoro nyocha ụdị dị iche iche dị ka mypy, n'agbanyeghị na ekwesịrị ịmara na mypy na-enyere aka idobe nkọwapụta ụdị dabara na koodu.

ndabere nke mypy

Akụkọ banyere mypy malitere na UK, na Cambridge, afọ ole na ole tupu m sonye na Dropbox. Etinyere m aka, dị ka akụkụ nke nyocha nke doctoral, na njikota nke asụsụ ndị edebere statically na ndị siri ike. A kpaliri m site na edemede gbasara mpịnye agbakwunyere site n'aka Jeremy Siek na Walid Taha, yana ọrụ Typed Racket. Agbalịrị m ịchọta ụzọ iji otu asụsụ mmemme maka ọrụ dị iche iche - site na obere edemede ruo na koodu ntọala nwere ọtụtụ nde ahịrị. N'otu oge ahụ, achọrọ m ijide n'aka na n'ime oru ngo nke ọ bụla, mmadụ agaghị eme nnukwu nkwekọrịta. Otu akụkụ dị mkpa n'ime ihe ndị a niile bụ echiche nke iji nwayọọ nwayọọ na-esi na ọrụ prototype a na-edeghị ede gaa n'ahịa a pịnyechara nke ọma. Ụbọchị ndị a, a na-ewere echiche ndị a nke ọma, ma na 2010 ọ bụ nsogbu nke a ka na-enyocha ya.

Ọrụ mbụ m n'ụdị nlele abụghị nke Python. Kama, m na-eji obere asụsụ “emere n’ụlọ”. Alor. Nke a bụ ọmụmaatụ nke ga-eme ka ị ghọta ihe anyị na-ekwu (ụdị nkọwa bụ nhọrọ ebe a):

def Fib(n as Int) as Int
  if n <= 1
    return n
  else
    return Fib(n - 1) + Fib(n - 2)
  end
end

Iji asụsụ ala nna dị mfe bụ ụzọ a na-ejikarị eme nchọpụta sayensị. Nke a bụ otú ahụ, ọ bụghị obere n'ihi na ọ na-enye gị ohere ịme nyocha ngwa ngwa, nakwa n'ihi na ihe na-enweghị ihe jikọrọ ya na nchọpụta nwere ike ileghara anya ngwa ngwa. Asụsụ mmemme nke ụwa na-abụkarị nnukwu ihe ngosi nwere mmejuputa dị mgbagwoju anya, nke a na-ebelata nnwale. Otú ọ dị, nsonaazụ ọ bụla dabere na asụsụ dị mfe na-ele anya ntakịrị enyo, ebe ọ bụ na n'inweta nsonaazụ ndị a onye nyocha ahụ nwere ike ịchụpụ ihe ndị dị mkpa maka iji asụsụ eme ihe.

Ụdị nlele m maka Alore dị ezigbo mma, mana achọrọ m ịnwale ya site na ịnwale ezigbo koodu, nke ị nwere ike ikwu na edeghị ya na Alore. Ọ dabara nke ọma nye m, asụsụ Alore gbadoro ụkwụ na otu echiche Python. Ọ dị mfe iji megharịa typechecker ka ọ rụọ ọrụ na syntax Python na semantics. Nke a nyere anyị ohere ịnwale ụdị ịlele koodu Python mepere emepe. Na mgbakwunye, edere m ihe ntụgharị iji gbanwee koodu edere na Alore ka ọ bụrụ Python koodu wee jiri ya tụgharịa koodu typechecker m. Ugbu a enwere m ụdị usoro nyocha nke edere na Python nke kwadoro mpaghara Python, ụfọdụ ụdị asụsụ ahụ! (Ụfọdụ mkpebi ụkpụrụ ụlọ nke nwere ezi uche maka Alore adabaghị maka Python, nke a ka na-ahụkwa na akụkụ nke mypy codebase.)

N'ezie, asụsụ nke ụdị usoro m na-akwado enweghị ike ịkpọ Python n'oge a: ọ bụ ụdị dị iche iche nke Python n'ihi njedebe ụfọdụ nke ụdị nkọwa Python 3.

Ọ dị ka ngwakọta Java na Python:

int fib(int n):
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

Otu n'ime echiche m n'oge ahụ bụ iji ụdị nkọwa iji melite arụmọrụ site n'ịchịkọta ụdị Python a na C, ma ọ bụ ikekwe JVM bytecode. Erutere m ogbo nke ide ihe nleba anya, mana m gbahapụrụ echiche a, ebe ọ bụ na ịlele ụdị n'onwe ya yiri ezigbo uru.

Emechara m gosipụta ọrụ m na PyCon 2013 na Santa Clara. Mụ na Guido van Rossum kwurịtakwara banyere nke a, onye ọchịchị aka ike Python dị mma maka ndụ. O mere ka m kwenye ka m hapụ syntax nke m wee rapara na Python 3 syntax ọkọlọtọ. Python 3 na-akwado nkọwa ọrụ, yabụ enwere ike idegharị ihe atụ m dị ka egosiri n'okpuru ebe a, na-ebute mmemme Python nkịtị:

def fib(n: int) -> int:
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

Ekwesịrị m ime nkwekọrịta ụfọdụ (nke mbụ, achọrọ m ịmara na m chepụtara syntax nke m maka nke a). Karịsịa, Python 3.3, ụdị asụsụ kachasị ọhụrụ n'oge ahụ, akwadoghị nkọwa ndị na-agbanwe agbanwe. Mụ na Guido kparịtara ụka site na ozi-e ohere dị iche iche maka imepụta nkọwapụta ụdịrị nkọwa ahụ. Anyị kpebiri iji ụdị nkọwa maka mgbanwe. Nke a jere ozi ebumnobi e bu n'obi, mana ọ dịtụ ntakịrị (Python 3.6 nyere anyị syntax kacha mma):

products = []  # type: List[str]  # Eww

Ụdị nkọwa bịakwara aka iji kwado Python 2, nke na-enweghị nkwado n'ime maka nkọwa nkọwa ụdị:

f fib(n):
    # type: (int) -> int
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

Ọ tụgharịrị na azụmaahịa ndị a (na ndị ọzọ) adịghị mkpa n'ezie - uru dị na ntinye ederede pụtara na ndị ọrụ chefuru n'oge na-adịghị anya maka syntax na-ezughị oke. Ebe ọ bụ na ọ nweghị ihe nrụpụta syntactic pụrụ iche ejiri mee ihe na ụdị Python koodu, ngwaọrụ Python dị adị na usoro nhazi koodu gara n'ihu na-arụ ọrụ nke ọma, na-eme ka ọ dịrị ndị mmepe mfe ịmụta ngwa ọhụrụ ahụ.

Guido mekwara ka m kwenye isonye na Dropbox mgbe m dechara akwụkwọ akụkọ gụsịrị akwụkwọ. Nke a bụ ebe akụkụ kacha atọ ụtọ nke akụkọ mypy malitere.

Ka ga-aga n'ihu…

Ezigbo ndị na-agụ akwụkwọ! Ọ bụrụ na ị na-eji Python, biko gwa anyị gbasara oke ọrụ ị mepụtara n'asụsụ a.

Ụzọ iji pịnye akara koodu Python 4 nde. Akụkụ 1
Ụzọ iji pịnye akara koodu Python 4 nde. Akụkụ 1

isi: www.habr.com

Tinye a comment