gpt4 book ai didi

python - myhdl中的yield语句

转载 作者:行者123 更新时间:2023-12-01 04:32:20 25 4
gpt4 key购买 nike

我的 myhdl 环境中有以下代码:

def rst(self):
rst.next=rst.active
self.wait_clks(5)

def wait_clks(self, cycles):
for _ in range(cycles):
yield self.clk.posedge

上面的代码不起作用,但是当我将其替换为以下代码时,它可以工作:

def rst(self):
rst.next=rst.active
for _ in range(5):
yield self.clk.posedge

我对此感到困惑,是否有人可以解释为什么函数定义中的yield不起作用?

最佳答案

当您只需调用 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) 的结果从 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
.
.

关于python - myhdl中的yield语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32208966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com