【问题标题】:How do decorators work when arguments are passed to them当参数传递给装饰器时,装饰器如何工作
【发布时间】:2018-05-30 07:26:27
【问题描述】:

我只是想熟悉 Python 中的装饰器,但作为该语言的新手,我不明白为什么会在下面得到这个:

我的带参数装饰器代码:

def decorator_with_argument(fun_name):  
    def decorator_func(func):
        '''decorator function which will provide additional functionality to my original function'''
        print("Inside decorator")
        def wrapper_func(*args,**kwargs):
            print("Inside wrapper")
            print("Calling function {} with parameters {} {}".format(fun_name, *args, **kwargs))
            return func(*args,**kwargs)
        return wrapper_func
    return decorator_func

@decorator_with_argument("Addition")
def addition_func(a,b):
    print(a+b)

@decorator_with_argument("Subtraction")
def subtraction_func(a,b):
    print(a-b)

addition_func(10,15)
subtraction_func(25,10)

输出:

Inside decorator
Inside decorator
Inside wrapper
Calling function Addition with parameters 10 15
25
Inside wrapper
Calling function Subtraction with parameters 25 10
15

谁能解释一下为什么我得到两次“内部装饰器”?

【问题讨论】:

    标签: python python-3.x python-decorators


    【解决方案1】:

    装饰器运行两次,因为您要装饰两个函数。装饰器在定义每个装饰函数时运行,因为 Python 会解析并在内部对程序进行字节编译。

    装饰器是否接受参数无关紧要;这就是装饰器的用途——在定义另一个函数时运行一个函数。

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 2014-11-17
      • 1970-01-01
      • 2018-08-24
      • 2014-10-01
      • 2016-02-14
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      相关资源
      最近更新 更多