Learn the concept
Functions are objects that can be stored, passed as arguments, and returned. This supports callbacks and configurable transformations. A higher-order function accepts or returns another function; the concept is useful without requiring a complex functional style.
A closure retains access to names from its enclosing scope. Understand when those names are read: closures created in a loop can all observe the loop’s final value unless you bind a separate value deliberately. Prefer clear named functions when a lambda would hide important logic.
Callbacks should have a documented input, output, and error contract. Decide whether an exception aborts the whole batch or is recorded for one item. Do not let callback flexibility become arbitrary execution of untrusted code.
Run and inspect
def multiplier(factor):
def apply(value):
return value * factor
return apply
double = multiplier(2)
triple = multiplier(3)
assert double(5) == 10
assert triple(5) == 15
Your exercise
Write a transformation pipeline that accepts a list of trusted functions. Test the order of application and how an exception is reported.
Check your understanding
You can explain what the closure retains and why transformation order changes the result.