Python@装饰器的标准写法和原理
function_name函数先作为参数传入function_1函数中,运行function_1函数,打印数值1,并将function_3作为变量赋值给function_name,此时参数5并没有传入到function_1中,等返回function_3函数的时候传入参数值5,即:
function_name(5) == function_1(function_name)(5) == function_3(5)
注意:
1、参数5并没有传入到function_1中,等返回function_3函数的时候传入参数值5
2、如果定义为:def function_name(x,y)
则装饰器中:def function_3(x,y),两者的形式保持一致
3、装饰器同时装饰function_name(x)和newfunction_name(x,y),以上写法就无法满足要求了。因此为了让装饰器可以适用于更多的对象,返回值的形式可以写成def function_3(*n,**n):
def function_1(A):
print("1")
#print(n) 如果运行这句话的话,报错:参数n没有被定义
def function_3(*n):
print(n)
A(*n)
return function_3
@function_1
def function_name(n):
print(n+3)
function_name(5)
运行结果是:
1
(5,)
8
1521

被折叠的 条评论
为什么被折叠?



