python 装饰器如何处理这段代码?
How does python decorator work on this code?
我正在尝试了解 python 装饰器。在我写这段代码之前,我以为我了解装饰器。
def func():
def wrapper(x):
return x()
return wrapper
@func()
def b():
return sum
a = b([1,2,5])
print a # Result: 8 How?
e = b # pass b function to variable e
f = e([3,4,8]) # called function b stored in variable e
print f # Result: 15
# I understand how 15 is derived here
您使用 func
作为装饰器 factory,它生成一个 称为 原始 b()
的装饰器产生装修效果。事情是这样的:
@func()
首先执行 func()
,然后使用 return 值作为装饰器。 func()
returns wrapper
,所以wrapper
被用作装饰器。
wrapper(b)
集x = b
,return集x()
。所以装饰器的结果是b()
,也就是sum
。 Python 集 b = sum
- 您在
b = sum
的位置调用了 b([1, 2, 5])
。所以 sum([1, 2, 5])
是 returned.
这里的重要部分是你使用 func
不是作为装饰器,而是作为装饰器工厂(调用它产生实际的装饰器),这增加了一个间接层。
我正在尝试了解 python 装饰器。在我写这段代码之前,我以为我了解装饰器。
def func():
def wrapper(x):
return x()
return wrapper
@func()
def b():
return sum
a = b([1,2,5])
print a # Result: 8 How?
e = b # pass b function to variable e
f = e([3,4,8]) # called function b stored in variable e
print f # Result: 15
# I understand how 15 is derived here
您使用 func
作为装饰器 factory,它生成一个 称为 原始 b()
的装饰器产生装修效果。事情是这样的:
@func()
首先执行func()
,然后使用 return 值作为装饰器。func()
returnswrapper
,所以wrapper
被用作装饰器。wrapper(b)
集x = b
,return集x()
。所以装饰器的结果是b()
,也就是sum
。 Python 集b = sum
- 您在
b = sum
的位置调用了b([1, 2, 5])
。所以sum([1, 2, 5])
是 returned.
这里的重要部分是你使用 func
不是作为装饰器,而是作为装饰器工厂(调用它产生实际的装饰器),这增加了一个间接层。