我无法按照这段代码逐步执行此操作。我所知道的是它打印列表[3.0,4.0,8.0]。
第一个et变量的yield(float)在第一次没有做任何事情?然后使用下一个(m)它开始运行其余的代码并进入While循环。然后在xtc上,当它确实拉链(xt + [et],args)时,[et]上有什么?它是空的吗?如果xt有2个元素而args有3个,你怎么能'压缩'?
def ar(*args):
et = yield(float)
xt = [1.0 for _ in range(len(args) - 1)]
while True:
xtc = sum(map(lambda x: x[0] * x[1], zip(xt + [et], args)))
xt = [xtc] + xt[:-1]
et = yield xtc
n = [1.0, 2.0, 3.0]
m = ar(-1.0, 1.0, 3.0)
next(m)
y = [m.send(i) for i in n]
print(y)