Существуют различные доступные варианты сохранения локального состояния в узле Bonobo ETL.
Это нормально, чтобы сделать это, как вы сделали (хотя я думаю, что это трудно читать), я, как правило, предпочитают использовать затворы, которые я думаю, более читаемым (но я согласен, что спорно):
import bonobo
def CumSum():
total = 0
def cum_sum(x):
nonlocal total
total += x
yield x, total
return cum_sum
def get_graph(**options):
graph = bonobo.Graph()
graph.get_cursor() >> range(100) >> CumSum() >> print
return graph
# The __main__ block actually execute the graph.
if __name__ == "__main__":
parser = bonobo.get_argument_parser()
with bonobo.parse_args(parser) as options:
bonobo.run(get_graph(**options))
В исходном коде бонобо доступно несколько примеров, пожалуйста, посмотрите в https://github.com/python-bonobo/bonobo/blob/develop/bonobo/nodes/basics.py (и есть примеры, написанные в разных стилях).
Обратите внимание, что здесь я использую синтаксис Bonobo 0.7 (входящий) для построения графика, но то же самое можно использовать с текущей стабильной версией (0.6), заменив операторы >> на вызовы add_chain.