Tôi đang dần dần quấn quanh đầu máy phát Python.Máy phát trả lại từ một chức năng
Mặc dù đây không phải là vấn đề thực tế trong cuộc sống, tôi vẫn tự hỏi tại sao tôi không thể trả lại máy phát từ một chức năng.
Khi tôi xác định hàm có yield
, nó hoạt động như một trình tạo. Nhưng nếu tôi xác định nó bên trong một chức năng khác và cố gắng trả lại thay vào đó, tôi nhận được một chức năng bình thường, tức là không phải là một máy phát điện với phương thức next
.
Nói cách khác, tại sao cách tiếp cận give_gen()
trong mã bên dưới không hoạt động?
#!/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
Tại sao tôi không thể trả lại trình tạo từ chức năng?