在python上使用yield和zip。任何人都可以帮我理解这段代码吗?

时间:2017-05-07 22:34:26

标签: python python-3.x

我无法按照这段代码逐步执行此操作。我所知道的是它打印列表[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)

0 个答案:

没有答案