logo

Când să folosiți yield în loc de return în Python?

Declarația yield suspendă execuția unei funcții și trimite o valoare înapoi apelantului, dar păstrează o stare suficientă pentru a permite reluarea funcției de unde a rămas. Când funcția se reia, aceasta continuă execuția imediat după ultima rulare de randament. Acest lucru permite codului său să producă o serie de valori în timp, mai degrabă decât să le calculeze simultan și să le trimită înapoi ca pe o listă.

Să vedem cu un exemplu:



Piton

mașină virtuală java






# A Simple Python program to demonstrate working> # of yield> # A generator function that yields 1 for the first time,> # 2 second time and 3 third time> def> simpleGeneratorFun():> >yield> 1> >yield> 2> >yield> 3> # Driver code to check above generator function> for> value>in> simpleGeneratorFun():> >print>(value)>



>

>

Ieșire:

1 2 3>

Întoarcere trimite o valoare specificată înapoi apelantului său, în timp ce Randament poate produce o succesiune de valori. Ar trebui să folosim yield atunci când vrem să iterăm peste o secvență, dar nu vrem să stocăm întreaga secvență în memorie. Randamentul este folosit în Python generatoare . O funcție generatoare este definită la fel ca o funcție normală, dar ori de câte ori trebuie să genereze o valoare, o face cu cuvântul cheie yield, mai degrabă decât return. Dacă corpul unui def conține randament, funcția devine automat o funcție generatoare.

Piton




# A Python program to generate squares from 1> # to 100 using yield and therefore generator> # An infinite generator function that prints> # next square number. It starts with 1> def> nextSquare():> >i>=> 1> ># An Infinite loop to generate squares> >while> True>:> >yield> i>*>i> >i>+>=> 1> # Next execution resumes> ># from this point> # Driver code to test above generator> # function> for> num>in> nextSquare():> >if> num>>>>:> >break> >print>(num)>

>

java cum se convertesc șirul în int
>

Ieșire:

1 4 9 16 25 36 49 64 81 100>