00:00Acest videoclip va vorbi despre noua caracteristică a argumentelor numai poziționale. O să vă pun să începeți cu un exemplu. Vreau să încep acest videoclip vorbind despre o funcție încorporată numită float().

00:09float() poate fi folosită pentru a converti șiruri de text sau numere în obiecte float, așa cum urmează. Dacă aduceți funcția help() pe funcția încorporată float, dacă vă uitați la semnătura pentru float chiar aici, veți observa că există o bară oblică (/) după parametru. Ce înseamnă aceasta? Ei bine, se pare că există un singur parametru al funcției float() și se numește x, iar atunci când o apelați nu aveți voie să folosiți numele parametrului. Atunci când folosiți float(), aveți voie să specificați argumentele doar prin poziție, nu printr-un cuvânt cheie. Permiteți-mi să vă arăt la ce mă refer. Deci, din nou, observați bara oblică (/) aici. Apăsând q pentru a ieși din help(). Deci, dacă încercați din nou float() și spuneți x="3.8" – un șir de text – veți vedea aici că spune float() takes no keyword arguments, doar acest argument pozițional.

00:53Nu puteți folosi un cuvânt cheie atunci când specificați argumentul. Înainte de Python 3.8, nu exista o modalitate ușoară de a specifica faptul că argumentele trebuie să fie doar poziționale în funcțiile proprii. Deci, dacă ar fi să definiți ceva de genul acestei funcții – o vom numi incr() (increment).

01:10Când apelați incr(), și să spunem că îi dați un float, ați putea folosi oricare dintre metode, iar acest lucru este normal pentru un argument obișnuit. Și aici intervine schimbarea în Python 3.8.

01:24Ați putea rescrie funcția de incrementare incr() pentru a accepta argumente numai poziționale. Ar arăta mai degrabă așa, cu o virgulă (,), apoi o bară oblică (/), iar restul este la fel.

01:40Atunci când apelați incr(), asta funcționează bine. Dar dacă ar fi să folosiți acum cuvântul cheie, se întâmplă ceva nou. Se spune aici incr() got some positional-only arguments passed as keyword arguments.

01:55Așa că va ridica o excepție și vă va da un TypeError. Puteți folosi acest lucru aproape ca un separator între argumentele doar poziționale și argumentele obișnuite. Dați-mi voie să vă pun să încercați asta cu un alt exemplu.

02:07Definiți o nouă funcție numită greet(). va primi un name ca argument doar pozițional, apoi veți pune acea bară oblică (/) acolo, astfel încât să puteți combina argumentele doar poziționale cu cele obișnuite. Așadar, iată un argument obișnuit de tip greeting.

02:23Aici veți returna un șir f cu greeting. Dacă nu ați lucrat încă cu șiruri f, voi include un link în textul de mai jos către articole și cursuri pe această temă.

02:31Comma, spațiu, the name. Așa că atunci când apelați greet() – din nou, greeting implicit va fi "Hello".

02:37Vă introduceți name aici ca fiind doar pozițional.

02:43Greav. Ați putea, de asemenea, să apelați greet()

02:49și să-i dați un greeting.

02:55Dar ceea ce nu puteți face – sau ceea ce vă va da o eroare – este dacă introduceți name,

03:08acolo veți obține o excepție de TypeError. Din nou, la fel ca în cazul precedent pentru incr(), greet() a primit niște argumente numai poziționale trecute ca argumente de tip cuvânt cheie, în special name. La prima vedere, argumentele poziționale pot părea un pic limitative și contrare mantrei Python despre importanța lizibilității.

03:26Vă veți descoperi probabil că nu sunt multe ocazii în care argumentele numai poziționale vă îmbunătățesc codul. Cu toate acestea, în circumstanțele potrivite, vă poate oferi o anumită flexibilitate atunci când proiectați funcții.

03:35În primul rând, argumentele numai poziționale au sens atunci când aveți argumente care au o ordine naturală, dar sunt greu de dat nume descriptive bune. Un alt beneficiu al utilizării argumentelor numai poziționale este că vă puteți refactoriza mai ușor funcțiile – în special, puteți schimba numele parametrilor fără să vă faceți griji că alt cod depinde de aceste nume.

03:57Pentru a repeta această informație, cum specificați argumentele numai poziționale? Folosiți bara oblică (/) pentru a indica faptul că argumentele dinaintea ei trebuie să fie specificate prin poziție. Pentru a afla mai multe despre notația slash, PEP 457 oferă o discuție aprofundată despre aceasta. PEP 570 aprofundează mult mai mult parametrii Python numai poziționali. Legăturile către ambele sunt în textul de sub acest videoclip.

04:20Complementarul argumentelor numai poziționale ar fi argumentele numai de tip keyword-only, iar acestea sunt disponibile în orice versiune de Python 3. Puteți specifica faptul că doriți argumente numai cu cuvinte cheie folosind un asterisc (*).

04:31Toate argumentele după acel * trebuie să fie specificate folosind un cuvânt cheie. Iată un exemplu de conversie în Fahrenheit, și puteți vedea aici că are un argument numai cu cuvânt cheie de celsius.

04:46Dă-mi voie să te pun să încerci această funcție. Deci aici, pentru a specifica keyword-only, trebuie să puneți un * și apoi să puneți argumentul keyword după – în acest caz, celsius. Și în acest caz, return

05:0232 + celsius * 9 / 5. Deci aici, dacă ar fi să apelați to_fahrenheit() și să-i dați doar o valoare, să zicem 40 grade Celsius, se spune aici că takes 0 positional arguments but 1 was given.

05:16Așa că era necesar să aveți un cuvânt cheie acolo pentru a-l putea apela corect. Și, de asemenea, în funcție de circumstanțe, este posibil să doriți să combinați argumente numai poziționale, regulate și numai cu cuvinte cheie. Pentru a face acest lucru, trebuie să le specificați separate de acea bară oblică (/) și de asterisc (*).

05:35Așa că ar arăta cam așa. Aici, o poziție numai de text, o bară oblică (/). Aici, argumentul standard.

05:46Și acum, după border, folosind *, argumentul keyword-only de width, care are o valoare implicită de 50.

05:54Întoarceți un șir f cu un spațiu în fața valorii pentru argumentul text și apoi un alt spațiu. Apoi folosiți metoda text string din .center() cu doi parametri pe care îi luați din aceste argumente, width și border.

06:08 Singurul care este pozițional este text. Ați putea începe cu headline() și să spuneți "Positional-only".

06:18Aici, puteți vedea valoarea implicită care va fi acel tip de frontieră cu un width de 50, arătând ceva de genul acesta. Din nou, din moment ce este doar pozițională, dacă ar fi să îi dați text,

06:35aceasta ar genera o eroare, un TypeError. Pentru border, este un argument obișnuit. Deci, în acest caz, ați putea spune doar o valoare, de exemplu, semnul egal ("=") în schimb.

06:49Sau ați putea specifica de fapt că border este egal cu, să zicem, două puncte (:). Se va accepta oricare dintre cele două stiluri. Dar width trebuie specificat folosind un cuvânt cheie dacă aveți de gând să-l introduceți în…

07:07înlocuind valoarea implicită cu o valoare de 38.

07:15Dacă ar fi să îi dați doar valoarea 38, aceasta ar ridica din nou o excepție, obținând un TypeError: headline() takes 1 to 2 positional arguments but 3 were given. Deci, din nou, acesta trebuie să fie un argument de tip cuvânt cheie.

07:29Așa că, după cum puteți vedea, argumentele numai poziționale pot completa în mod plăcut argumentele obișnuite și argumentele numai de tip cuvânt cheie. În următorul videoclip, veți învăța cum Python 3.8 îmbunătățește verificarea tipurilor prin utilizarea unor tipuri mai precise.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.