Это эквивалентно:
def sumto(n, lst):
result = []
if not n and not lst:
result.append([])
return result
if n < 0 or not lst:
return result
head, *tail = lst
for sol in sumto(n-head, tail):
result.append([head] + sol)
result.extend(sumto(n, tail))
return result
Следующие правила могут применяться довольно широко для преобразования функции генератора в функцию, возвращающую list
:
return
# =>
return result
# also think of an implicit "return" at the end of the generator function
yield x
# =>
result.append(x)
yield from x
# =>
result.extend(x)
Как правило, однако , вы должны стремиться изменить свой код наоборот. Генераторы - один из лучших Python. Они позволяют вам перебирать все элементы, не удерживая их все в памяти, они только выполняют работу по генерации, пока вы не найдете то, что ищете. А если вам нужен список, просто позвоните им list(...)
.