当您简单地调用 a generator function
(一个在其主体中具有 yield 语句的) 时,您会得到一个生成器对象,它甚至不会在该点开始遍历该函数,它只会在您开始迭代返回的生成器对象(或调用next()
它)。例子 -
>>> def gen1():
... print("Starting")
... for i in range(10):
... yield i
...
>>> g = gen1()
>>> g
<generator object gen1 at 0x00273E68>
正如你在上面看到的,它并没有开始通过函数,它只是返回了生成器对象。要遍历该函数,您需要迭代g
或调用next()
它。例子 -
>>> g.next()
Starting
0
>>> for i in g:
... print i
...
1
2
.
.
在您的第一种情况下,也发生了类似的事情,您只是调用生成器函数,该函数返回生成器对象,然后丢弃结果。最有可能的是,无论从哪里rst()
被调用,它都期待一个生成器对象作为回报。在这种情况下,您的第二种方法是最好的。
但是如果你真的想在一个单独的函数中制作它(而且我认为没有必要在一个单独的方法中制作它),你可以直接返回self.wait_clks(5)
back from的结果rst(self)
。例子 -
def rst(self):
rst.next=reset.active
return self.wait_clks(5)
显示这有效的示例 -
>>> def f():
... return gen1()
...
>>> for i in f():
... print(i)
...
Starting
0
1
2
.
.