indexable[n]
- это способ получить значение в индексе n
из indexable
.Поскольку кортежи являются индексируемыми коллекциями (они определяют __getitem__
), вы получаете нулевой индекс и один индекс этого кортежа (первое и второе значения соответственно).
Это может быть лучше понятов недопустимом синтаксисе:
lambda (s1, s2), i: (s2, p*s2 + q*s1 + r)
Если вы правильно интуитивно понимаете, accumulate([x1, x2, x3], fn)
возвращает бесконечный ряд [x1, fn(x1, x2), fn(x2, fn(x1, x2)), ...]
fn
, в данном случае это функция с сигнатурой:
def fn(last_last_value, last_value)
Документы , вероятно, показывают это наиболее четко, используя operator.add
(он же +
)
def accumulate(iterable, func=operator.add):
'Return running totals'
# accumulate([1,2,3,4,5]) --> 1 3 6 10 15
# accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120
it = iter(iterable)
try:
total = next(it)
except StopIteration:
return
yield total
for element in it:
total = func(total, element)
yield total