How to use Function Decorators in Python ?
Last Updated :
11 Oct, 2023
In Python, a function can be passed as a parameter to another function (a function can also return another function). we can define a function inside another function. In this article, you will learn How to use Function Decorators in Python.
Passing Function as Parameters
In Python, you can pass a function as an argument to another function, just like you would pass any other data type (e.g., integers, strings). This allows you to create more flexible and reusable code because you can write functions that take other functions as input, allowing you to customize the behaviour of the higher-order function.
Python3
def apply(func, value):
return func(value)
def square(x):
return x ** 2
result = apply(square, 5)
print(result) # Output: 25
Using @ function
A decorator is a function that takes a function as its only parameter and returns a function. This is helpful to "wrap" functionality with the same code over and over again. For example, the above code can be rewritten as follows. We use @func_name to specify a decorator to be applied to another function.
Python
# Adds a welcome message to the string
# returned by fun(). Takes fun() as
# parameter and returns welcome().
def decorate_message(fun):
# Nested function
def addWelcome(site_name):
return "Welcome to " + fun(site_name)
# Decorator returns a function
return addWelcome
@decorate_message
def site(site_name):
return site_name;
# Driver code
# This call is equivalent to call to
# decorate_message() with function
# site("GeeksforGeeks") as parameter
print site("GeeksforGeeks")
Output:
Welcome to GeeksforGeeks
Attaching Data to Functions
Decorators can also be useful to attach data (or add attribute) to functions.
Python
# A Python example to demonstrate that
# decorators can be useful attach data
# A decorator function to attach
# data to func
def attach_data(func):
func.data = 3
return func
@attach_data
def add (x, y):
return x + y
# Driver code
# This call is equivalent to attach_data()
# with add() as parameter
print(add(2, 3))
print(add.data)
Output:
5
3
‘add()’ returns sum of x and y passed as arguments but it is wrapped by a decorator function, calling add(2, 3) would simply give sum of two numbers but when we call add.data then ‘add’ function is passed into then decorator function ‘attach_data’ as argument and this function returns ‘add’ function with an attribute ‘data’ that is set to 3 and hence prints it. Python decorators are a powerful tool to remove redundancy. Please refer Decorators in Python for more det
Using add function
Here is an example to represent the use of add function in decorators.
In the code above, log_decorator is the decorator function that takes the add function as an argument. It returns a new function called wrapper, which adds logging before and after calling add. The @log_decorator syntax is a shorthand way of applying the log_decorator function to the add function. When we call add, the logging statements will be printed to the console.
Python3
def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"Calling {func.__name__} with args={args} kwargs={kwargs}")
result = func(*args, **kwargs)
print(f"{func.__name__} returned {result}")
return result
return wrapper
@log_decorator
def add(a, b):
return a + b
result = add(2, 3)
OutputCalling add with args=(2, 3) kwargs={}
add returned 5
Time complexity : O(1)
Auxiliary Space : O(n)
Similar Reads
How to call a function in Python Python is an object-oriented language and it uses functions to reduce the repetition of the code. In this article, we will get to know what are parts, How to Create processes, and how to call them.In Python, there is a reserved keyword "def" which we use to define a function in Python, and after "de
5 min read
How to Add Function in Python Dictionary Dictionaries in Python are strong, adaptable data structures that support key-value pair storage. Because of this property, dictionaries are a necessary tool for many kinds of programming jobs. Adding functions as values to dictionaries is an intriguing and sophisticated use case. This article looks
4 min read
Timing Functions With Decorators - Python Everything in Python is an object. Functions in Python also object. Hence, like any other object they can be referenced by variables, stored in data structures like dictionary or list, passed as an argument to another function, and returned as a value from another function. In this article, we are g
4 min read
Decorator to print Function call details in Python Decorators in Python are the design pattern that allows the users to add new functionalities to an existing object without the need to modify its structure. Decorators are generally called before defining a function the user wants to decorate. Example: Python3 # defining a decorator def hello_decora
3 min read
How to Recall a Function in Python In Python, functions are reusable blocks of code that we can call multiple times throughout a program. Sometimes, we might need to call a function again either within itself or after it has been previously executed. In this article, we'll explore different scenarios where we can "recall" a function
4 min read