当参数传递给它们时,装饰器如何工作

问题描述 投票:1回答:1

我只是想熟悉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个回答
0
投票

装饰器运行两次因为你正在装饰两个函数。装饰器在定义每个修饰函数时运行,因为Python解析并在内部对字节进行字节编译。

装饰者是否接受论证是无关紧要的;这就是装饰器用于 - 在定义另一个函数时运行函数。

© www.soinside.com 2019 - 2024. All rights reserved.