我试图理解Python中的生成器并实现了以下功能:
def yfun():
print("into y fun ... ")
for x in range(1,6):
print("tryin to yield : {}".format(x))
yield x
yieldVar = yfun()
for val in yieldVar:
print("value generated -> ", val)
输出如下:
into y fun ...
tryin to yield : 1
value generated -> 1
tryin to yield : 2
value generated -> 2
tryin to yield : 3
value generated -> 3
tryin to yield : 4
value generated -> 4
tryin to yield : 5
value generated -> 5
你能解释一下为什么这个函数被反复调用吗?变量不应该有值吗?应该对生成器变量进行迭代吗?你知道吗
调用生成器函数时,将返回生成器对象。不是像普通函数那样的单一值。这是一个可用于延迟计算的对象。每个生成器对象都有一个名为
__next__()
的方法。这允许Python通过调用__next__()
多次从生成器对象-而不是函数-yieldVar
生成值。你知道吗函数是而不是一次又一次地调用,您可以看到
"into y fun ..."
只打印了一次。你知道吗所发生的事情是,通过调用包含
yield
的函数得到的生成器正在被for循环推进(即使用)。你知道吗当生成器继续生成值时,循环运行并打印生成的元素。你知道吗
相关问题 更多 >
编程相关推荐