📜  Python中带有参数的装饰器

📅  最后修改于: 2020-04-06 08:45:36             🧑  作者: Mango

先决条件: Python中的装饰器
Python函数是First Class成员,这意味着可以像对待对象一样对待函数。

  • 可以将功能分配给变量,即可以对其进行引用。
  • 可以将函数作为参数传递给另一个函数。
  • 可以从函数返回函数。

带参数的装饰器与普通装饰器类似。
带参数的装饰器的语法:

@decorator(params)
def func_name():
    ''' 函数内容'''

上面的代码等效于:

def func_name():
    ''' 函数内容'''
func_name = (decorator(params))(func_name)
"""

当执行从左到右开始时,将调用decorator(params),它返回一个功能对象fun_obj。使用fun_obj调用fun_obj(fun_name)。在函数内部,执行所需的操作并返回实际的函数引用,该引用将分配给func_name。现在,可以使用func_name()调用应用了装饰器的函数。

带参数的装饰器如何实现

def decorators(*args, **kwargs):
    def inner(func):
        '''
           内部操作
        '''
        return func
    return inner #this is the fun_obj mentioned in the above content
@decorators(params)
def func():
    """
         函数实现
    """

在这里,参数也可以为空。

例:

# Python展示带有参数的修饰器
def decorator(*args, **kwargs):
    print("在修饰器内")
    def inner(func):
        print("内部函数")
        print("我喜欢", kwargs['like'])
        return func
    return inner
@decorator(like = "芒果文档")
def func():
    print("在实际函数中")
func()

输出: 

在修饰器内
内部函数
我喜欢 芒果文档
在实际函数中

该示例还告诉我们,外部函数参数可以通过随附的内部函数进行访问。

1.室内装饰器

2.函数内部