我只是想熟悉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解析并在内部对字节进行字节编译。
装饰者是否接受论证是无关紧要的;这就是装饰器用于 - 在定义另一个函数时运行函数。