Строго говоря, pipeline_step
не декоратор; он возвращает декоратор, который является функцией, которая принимает декорированную функцию в качестве аргумента.
pipeline_step
можно было бы также написать с помощью оператора def
, что может сделать его более явно:
def pipeline_step(step_id):
def decorator(f):
return Pipeline(step_id=step_id, fct_to_call=f)
return decorator
Когда вы вызываете pipeline_step(step_id='lacocouracha')
, он возвращает новую функцию decorator
(которая действует как замыкание вокруг переменной step_id
). decorator
затем получает функцию my_sum
в качестве аргумента, а имя my_sum
возвращается к экземпляру Pipeline
, возвращаемому decorator
.
Использование лямбда-выражения просто пропускает шаг необходимость придумать имя для декоратора, которое никогда не будет видно или использоваться вне самого pipeline_step
.
Для полноты напоминание, что
@pipeline_step(step_id='lacocouracha')
def my_sum(numba):
output = numba *1.45
return output
syntacti c сахар для
def my_sum(numba):
output = numba *1.45
return output
my_sum = pipeline_step(step_id='lacocoracha')(my_sum)
# == (lambda f: Pipeline(step_id=step_id, fct_to_call=f))(my_sum)
# == Pipeline(step_id=step_id, fct_to_call=my_sum)