有人能帮我理解下面代码中的s[1]和s[0]指的是什么吗?此代码将生成斐波那契级数。我还在努力理解accumulate()是如何工作的。它是否按原样返回第一个值(0,1),然后将lambda函数的第一个应用程序的结果用作s[1],并将repeat()生成的列表中的另一个元组(0,1)用作s[0]?或者s[0]和s[1]分别被指定为0和1
谢谢
import itertools as it
def second_order(p, q, r, initial_values):
"""Return sequence defined by s(n) = p * s(n-1) + q * s(n-2) + r."""
intermediate = it.accumulate(
it.repeat(initial_values),
lambda s, i: (s[1], p*s[1] + q*s[0] + r)
)
return intermediate
fibs = second_order(p=1, q=1, r=0, initial_values=(0, 1))
list(next(fibs) for n in range(8))
indexable[n]
是获取indexable
的索引n
中的值的方法。由于元组是可索引的集合(它们定义了__getitem__
),因此将得到该元组的零索引和一个索引(分别是第一个和第二个值)在不再有效的语法中可以更好地理解这一点:
正如您正确的直觉所示,
accumulate([x1, x2, x3], fn)
返回无穷级数[x1, fn(x1, x2), fn(x2, fn(x1, x2)), ...]
fn
在本例中是一个具有签名的函数:The docs可能用
operator.add
(又称+
)最清楚地显示了这一点因为
p=1
和q=1
和r=0
,我们可以完全忽略它们,最终归结为:你可以这样想象:
如你所见
current
从未被使用过在您的代码中,
i
是current
,s
是prev
,所以s[0] == prev[0]
是元组中的第一个元素,s[1]
是第二个元素相关问题 更多 >
编程相关推荐