Возможно ли использовать возвращемое функцией значение в генераторе списка?

Возможно ли использовать возвращаемое функцией значение на следующей итерации генератора списка?

Например, нечто подобное (понимаю, что пример нерабочй):

result = [accum = func(accum, i)  for i in mas] 

Ответы (2 шт):

Автор решения: MaxU

В Python 3.8 добавили "Assignment Expressions". Более подробно в PEP-572.

Пример:

items = list(range(1, 10))
[ii-1 for x in items if (ii:=x+1) % 3 == 0]
#  NOTE: -------------> ^^^^^^^^^

вывод:

>>> [2, 5, 8]

UPDATE: этот ответ показывает как использовать возвращенное значение на одной итерации генератора. Я не уверен, что "Assignment Expressions" видны на следующей итерации генератора.

→ Ссылка
Автор решения: extrn

Для такой задачи лучше использовать не генератор (он не предназначен для работы с изменяемым состоянием), а свертку с накоплением промежуточных значений.

import itertools

def func(x, y):
    return x * y

mas = [2, 3, 4, 5]

result_list = list(itertools.accumulate(mas, func)) # [2, 6, 24, 120]

или простую свертку

import functools

result_int = functools.reduce(func, mas) # 120

В обоих случях (для accumulate - начиная с python 3.8) можно указать начальное значение аккумулятора

result_list = list(itertools.accumulate(mas, func, initial=10)) # [10, 20, 60, 240, 1200]
result_int = functools.reduce(func, mas, 10) # 1200
→ Ссылка