This chapter showed us some of the places where decorators can be used to make our code simpler and add some fairly complex behavior to very simple functions. Truthfully, most decorators are more complex than the regular function would have been by simply adding the functionality directly, but the added advantage of applying the same pattern to many functions and classes is generally well worth it.
Decorators have so many uses to make your functions and classes smarter and more convenient to use:
The most important takeaway of this chapter should be to never forget
functools.wraps when wrapping a function. ...