La instrucció yield suspèn l'execució d'una funció i envia un valor a la persona que truca, però conserva l'estat suficient per permetre que la funció es reprengui on es va quedar. Quan la funció es reprèn, continua amb l'execució immediatament després de l'última execució de rendiment. Això permet que el seu codi produeixi una sèrie de valors al llarg del temps, en lloc de calcular-los alhora i enviar-los com una llista.
Vegem-ho amb un exemple:
Python
python ordenant tuples
# 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)> |
>
>
Sortida:
1 2 3>
Tornar envia un valor especificat a la persona que truca, mentre que Rendiment pot produir una seqüència de valors. Hauríem d'utilitzar yield quan volem iterar sobre una seqüència, però no volem emmagatzemar tota la seqüència a la memòria. El rendiment s'utilitza a Python generadors . Una funció generadora es defineix com una funció normal, però sempre que necessita generar un valor, ho fa amb la paraula clau yield en lloc de retorn. Si el cos d'una definició conté rendiment, la funció es converteix automàticament en una funció generadora.
Python
# 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>>100>:> >break> >print>(num)> |
>
>
Sortida:
1 4 9 16 25 36 49 64 81 100>