Powoli zaczynam oblewać głowę wokół generatorów Pythona.Powracanie generatora z funkcji
Na razie nie jest to prawdziwy problem, nadal zastanawiam się, dlaczego nie mogę zwrócić generatora z funkcji.
Kiedy zdefiniuję funkcję z yield
, działa ona jak generator. Ale jeśli zdefiniuję to jako inną funkcję i spróbuję zwrócić to, otrzymam zwykłą funkcję, tj. Nie będę generował generatora z metodą next
.
Innymi słowy, dlaczego kod give_gen()
w poniższym kodzie nie działa?
#!/usr/bin/python
import time
def gen(d):
n = 0
while True:
n = n + d
time.sleep(0.5)
yield n
def give_gen(d):
def fn():
n = 0
while True:
n = n + d
time.sleep(0.5)
yield n
return fn
if __name__ == '__main__':
g = give_gen(3) # does not work
g = gen(3) # works well
while True:
print g.next()
# AttributeError: 'function' object has no attribute 'next'
# in case of give_gen
Dlaczego nie mogę zwrócić generatora z funkcji?