====== yield ======
Vyzkoušejte a diskutujte se studenty:
def myfunc():
print('Before first yield.')
yield 'First yield.'
print('After first, before second yield.')
yield 'Second yield.'
print('After second yield.')
>>> gen = myfunc()
>>> next(gen)
Before first yield.
'First yield.'
>>> next(gen)
After first, before second yield.
'Second yield.'
>>> next(gen)
After second yield.
builtins.StopIteration:
>>> next(gen)
Traceback (most recent call last):
File "", line 1, in
builtins.StopIteration:
>>>
Volání v cyklu:
for neco in myfunc():
print('Got from the function:', neco)
print('---')
vyprodukuje
Before first yield.
Got from the function: First yield.
---
After first, before second yield.
Got from the function: Second yield.
---
After second yield.
>>>
Výstupy z generátoru lze zamozřejmě posbírat do seznamu:
>>> gen = myfunc()
>>> gen
>>> s = list(gen)
Before first yield.
After first, before second yield.
After second yield.
>>> s
['First yield.', 'Second yield.']
>>>
Pomocí ''yield'' lze velmi elegantně vytvořit generátor Fibonacciho řady:
def fibgen():
a, b = 0, 1
while 1:
yield a
a, b = b, a+b