Я слежу за докладом PyData в https://youtu.be/R1em4C0oXo8, докладчик, которому нужна библиотека для конвейерного вызова yamal
. Эта библиотека не с открытым исходным кодом. Таким образом, пытаясь воспроизвести FP на python
, я попытался воспроизвести основы этой библиотеки.
В двух словах, вы строите серию pure функций в python
(f1
, f2
, f3
и т. Д.) И создаете их список следующим образом:
pipeline = [f1, f2, f3, f4]
Затем вы можете применить функцию run_pipeline
, и результатом будет композиция:
f4(f3(f2(f1)))
Требования к функциям состоят в том, что все они имеют одно возвращаемое значение, и, кроме f1
, все имеют один вход.
Эта часть проста в реализации. Я сделал это с помощью создания функций.
def run_pipeline(pipeline):
get_data, *rest_of_steps = steps
def compose(x):
for f in rest_of_steps:
y = f(x)
x = y
return x
data = get_data()
return compose(data)
В ток-шоу показано более продвинутое использование этой абстракции, он определяет «операторы» fork
и reducer
. Эти «операторы» позволяют запускать конвейеры следующим образом:
pipeline1 = [ f1, fork(f2, f3), f4 ]
, что эквивалентно: [ f4(f2(f1)), f4(f3(f1)) ]
и
pipeline2 = [ f1, fork(f2, f3), f4, reducer(f5) ]
, что эквивалентно f5([f4(f3(f1)), f4(f2(f1))])
.
Я пытаюсь решить эту проблему с помощью функционального программирования , но я просто не могу. Я не знаю, являются ли fork
и reducer
decorators
(и если да, то как мне передать список следующих функций?), Не знаю, следует ли мне преобразовать этот список в граф, используя объекты? сопрограммы? (может быть, все это чепуха) Я просто совершенно запутался.
Может ли кто-нибудь помочь мне с тем, как создать это с помощью python
и функционального программирования ?
ПРИМЕЧАНИЕ : В видео он рассказывает о наблюдателях или исполнителях. для этого упражнения мне плевать на них.