【发布时间】:2019-07-02 12:09:22
【问题描述】:
我正在学习编写 python 装饰器。以下是两个例子。
示例 1:
def dec():
def wrapper(func):
print(func)
return func
return wrapper
@dec
def hello():
print('hello')
示例 2:
def dec(name):
def wrapper(fn):
print(fn)
return fn
return wrapper
@dec('a')
def hello(x):
print(x)
所以我的问题是为什么示例 1 会抛出 dec() takes 0 positional arguments but 1 was given 的异常,而示例 2 运行良好。
【问题讨论】:
-
在第一个示例中,您需要像这样调用
dec:@dec()。如果你想像你一样使用它,你的装饰器本身必须具有该功能(即不需要包装器)。