A Decorator is one of the most powerful design patterns in Python. Decorator is used to add new features to an already created object without modifying its structure. With Decorators, you can easily wrap another function for extending the wrapped function beh**iour and this is done without modifying it permanently.

Functions are first-class objects

In Python, the functions are considered as first-class objects i.e. we can store the functions in a variable, return function from a function, etc.

Below are some examples displaying functions in Python useful for understanding Decorators.

Functions as objects

Example

The functions are considered as object in this example. Here, the function demo() is assigned to a variable −

 
# Creating a function def demo(mystr): return mystr.swapcase() # swapping the case print(demo('Thisisit!')) sample = demo print(sample('Hello'))

Output

tHISISIT!
hELLO

Pass the function as an argument

Example

In this the function is passed as an argument. The demo3() function calls demo() and demo2() function as a parameter.

 
def demo(text): return text.swapcase() def demo2(text): return text.capitalize() def demo3(func): res = func("This is it!") # Function passed as an argument print (res) # Calling demo3(demo) demo3(demo2)

Output

tHIS IS IT!
This is it!

Now, let us work around Decorators

Decorators in Python

In Decorators, the functions are taken as an argument into another function and then called inside the wrapper function. Let us see a quick example:

@mydecorator
   def hello_decorator():
      print("This is sample text.")

The above can also be written as −

def demo_decorator():
   print("This is sample text.")

hello_decorator = mydecorator (demo_decorator)

Decorator Example

 
def demoFunc(x,y): print("Sum = ",x+y) # outer function def outerFunc(sample): def innerFunc(x,y): # inner function return sample(x,y) return innerFunc # calling demoFunc2 = outerFunc(demoFunc) demoFunc2(10, 20)

Output

Sum = 30

Applying Syntactic Decorator

Example

The above example can be simplified using decorator with the @symbol. This eases applying decorators by placing @ symbol before the function we want to decorate −

 
# outer function def outerFunc(sample): def innerFunc(x,y): # inner function return sample(x,y) return innerFunc @outerFunc def demoFunc(x,y): print("Sum = ",x+y) demoFunc(10,20)

Output

Sum = 30
从您进入本站,下单,注册账号表示您已同意接受本站{免责声明}中的一切条款!
本站发布的内容若侵犯到您的权益,请邮件联系站长,或者点击右侧举报,我们将及时处理!
资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。

分享链接 分享海报

用户评论 (0)

请登陆后发表评论