Skip to content

Instantly share code, notes, and snippets.

@MSK61
Last active May 30, 2020 19:20
Show Gist options
  • Save MSK61/1ffb692f2a5a43ad84d3c19ce6d45137 to your computer and use it in GitHub Desktop.
Save MSK61/1ffb692f2a5a43ad84d3c19ce6d45137 to your computer and use it in GitHub Desktop.
implementing python decorators using functional programming
import functools
@functools.partial(lambda wrapper: lambda logger: lambda func: lambda x, y: wrapper(logger, func, x, y))
def exec_with_param_logging(logger, func, x, y):
print(f"{logger} calling in, inputs: {x}, {y}.")
res = func(x, y)
print(f"{logger} calling out, return: {res}.")
return res
@exec_with_param_logging("main logger")
def add_nums_1(x, y):
return x + y
add_nums_1(3, 5)
# derivation:
# exec_with_param_logging("main logger", add_nums_1, 3, 5)
# (lambda x, y: exec_with_param_logging("main logger", add_nums_1, x, y))(3, 5)
# (lambda func: lambda x, y: exec_with_param_logging("main logger", func, x, y))(add_nums_1)(3, 5)
# (lambda logger: lambda func: lambda x, y: exec_with_param_logging(logger, func, x, y))("main logger")(add_nums_1)(3, 5)
# (lambda wrapper: lambda logger: lambda func: lambda x, y: wrapper(logger, func, x, y))(exec_with_param_logging)("main logger")(add_nums_1)(3, 5)
# partial(lambda wrapper: lambda logger: lambda func: lambda x, y: wrapper(logger, func, x, y))(exec_with_param_logging)("main logger")(add_nums_1)(3, 5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment