Randamentul este cuvântul cheie care este folosit pentru a ieși din funcția ascultătorului. Generatoare de funcții similare sunt utilizate atunci când trebuie să creați o secvență mai complexă decât intervalul returnat (10).
Pentru a înțelege ce randament are, trebuie să înțelegeți ce sunt generatoarele. Generatoarele sunt precedate de iteratori. Când creați o listă, puteți citi elementele sale unul câte unul - aceasta se numește iterație:
Mylist este un obiect iterabil. Când creați o listă utilizând expresia generatorului, creați și un iterator:
Tot ceea ce este posibil să se aplice design «pentru ... în ...», este iterable: liste, siruri de caractere, fișiere ... Acest lucru este convenabil, deoarece poate fi citit de la aceste valori după cum este necesar - dar toate valorile sunt stocate în memorie, care nu este întotdeauna de dorit, dacă aveți multe sensuri.
Generatoare Python
Generatoarele sunt, de asemenea, obiecte iterate, dar le puteți citi doar o singură dată. Acest lucru se datorează faptului că acestea nu stochează valori în memorie, ci le generează în zbor:
Totuși, cu excepția faptului că parantezele sunt folosite în locul parantezelor pătrate. DAR: nu puteți folosi a doua generație pentru constructorul mygenerator, deoarece generatorul poate fi folosit o singură dată: se calculează 0, apoi se uită despre el și se calculează 1, completând calculul 4 - unul câte unul.
Randamentul este un cuvânt cheie care este folosit ca o retur pentru o funcție care returnează un generator.
În acest caz, exemplul este inutil, dar este convenabil dacă știți că funcția va reveni la un set mare de valori, pe care va trebui doar să le citiți o singură dată.
Pentru a stăpâni randamentul, trebuie să înțelegeți că atunci când apelați o funcție, codul din interiorul corpului funcției nu este executat. Funcția returnează doar un generator de obiecte - un pic dificil :-)
Codul dvs. va fi apelat de fiecare dată pentru apelurile către generator.
Acum partea dificilă:
În prima rulare a funcției dvs., aceasta va fi executată de la început până la momentul în care se întâlnește randamentul - atunci ea returnează prima valoare din bucla. Pentru fiecare apel următor, va exista o altă iterație a ciclului pe care l-ați scris, următoarea valoare va fi returnată - și atât timp cât valorile nu se vor termina.
Generatorul este considerat gol, de îndată ce codul funcției nu se confruntă cu randament. Acest lucru se poate întâmpla din cauza sfârșitului bucla, sau dacă nu sunt îndeplinite unele dintre condițiile "dacă / nu".
Metoda extend () este o metodă de listă care se așteaptă la iterație și adaugă valorile acesteia în listă.
De obicei îi dăm o listă:
Dar în codul nostru este nevoie de un generator, care este bun din următoarele motive:
Și funcționează, deoarece Python nu-i pasă dacă argumentul acestei metode este o listă sau nu. Python așteaptă un obiect iterabil, deci va funcționa cu șiruri, liste, tupluri și generatoare! Aceasta se numește tastarea rațelor și este unul dintre motivele pentru care Python este atât de cool.