我们知道装饰工是Python中非常强大且有用的工具, 因为它允许程序员修改函数或类的行为。在本文中, 我们将了解 带参数的装饰器借助多个示例。
Python函数是First Class公民, 这意味着可以像对待对象一样对待函数。
- 可以将功能分配给变量, 即可以对其进行引用。
 - 可以将函数作为参数传递给另一个函数。
 - 可以从函数返回函数。
 
具有参数的装饰器与普通装饰器类似。
具有参数的装饰器的语法–
@decorator(params)
def func_name():
    ''' Function implementation''' 
 
 
上面的代码相当于
def func_name():
    ''' Function implementation'''
func_name = (decorator(params))(func_name)
""" 
 
 
从左到右执行装饰器(参数)被调用返回一个函数对象fun_obj。使用fun_obj进行调用fun_obj(有趣的名字)制造。在内部函数内部, 执行所需的操作并返回实际的函数引用, 该引用将分配给func_name。现在, func_name()可用于调用应用了装饰器的函数。
带参数的装饰器如何实现
def decorators( * args, * * kwargs):
     def inner(func):
         '''
            do operations with func
         '''
         return func
     return inner #this is the fun_obj mentioned in the above content
  
@decorators (params)
def func():
     """
          function implementation
     """ 
 
 
这里参数也可以为空。
首先观察这些–
# Python code to illustrate 
# Decorators basic in Python 
  
def decorator_fun(func): 
   print ( "Inside decorator" ) 
  
   def inner( * args, * * kwargs): 
     print ( "Inside inner function" ) 
     print ( "Decorated the function" ) 
     # do operations with func
      
     func()
      
   return inner 
  
@decorator_fun
def func_to(): 
     print ( "Inside actual function" ) 
  
func_to() 
 
 
另一种方式 -
# Python code to illustrate 
# Decorators with parameters in Python 
  
def decorator_fun(func): 
   print ( "Inside decorator" ) 
  
   def inner( * args, * * kwargs): 
     print ( "Inside inner function" ) 
     print ( "Decorated the function" ) 
      
     func()
      
   return inner 
  
  
def func_to(): 
     print ( "Inside actual function" ) 
  
# another way of using decorators
decorator_fun(func_to)() 
 
 
输出如下:
Inside decorator
Inside inner function
I like lsbin
Inside actual function 
 
 
让我们来看另一个例子–
范例1:
# Python code to illustrate 
# Decorators with parameters in Python 
  
def decorator( * args, * * kwargs):
     print ( "Inside decorator" )
      
     def inner(func):
          
         # code functionality here
         print ( "Inside inner function" )
         print ( "I like" , kwargs[ 'like' ]) 
          
         func()
          
     # reurning inner function    
     return inner
  
@decorator (like = "lsbin" )
def my_func():
     print ( "Inside actual function" ) 
 
 
输出如下:
Inside decorator
Inside inner function
I like lsbin
Inside actual function 
 
 
范例2:
# Python code to illustrate 
# Decorators with parameters in Python 
  
def decorator_func(x, y):
  
     def Inner(func):
  
         def wrapper( * args, * * kwargs):
             print ( "I like lsbin" )
             print ( "Summation of values - {}" . format (x + y) )
  
             func( * args, * * kwargs)
              
         return wrapper
     return Inner
  
  
# Not using decorator 
def my_fun( * args):
     for ele in args:
         print (ele)
  
# another way of using dacorators
decorator_func( 12 , 15 )(my_fun)( 'Geeks' , 'for' , 'Geeks' ) 
 
 
输出如下:
I like lsbin
Summation of values - 27
Geeks
for
Geeks 
 
 
这个例子还告诉我们, 外部函数参数可以由内部函数访问。
1.室内装饰器
 
2.函数内部
 
注意 :
图像快照是使用PythonTutor拍摄的。
注意怪胎!巩固你的基础Python编程基础课程和学习基础知识。
首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。

