此问题已经在这里有了答案:
我正在阅读Python 3 Metaprogramming David撰写的出色的Beazley教程。
其中有一个装饰器,外观如下(幻灯片50):
from functools import wraps, partial
def debug(func=None, *, prefix=''):
'''
Decorator with or without optional arguments
'''
if func is None:
return partial(debug, prefix=prefix)
msg = prefix + func.__qualname__
@wraps(func)
def wrapper(*args, **kwargs):
print(msg)
return func(*args, **kwargs)
return wrapper
在函数的参数中,在关键字参数func
和prefix
之间有一个*。我已经测试了带有或不带有星形的装饰器,并且在两种情况下都可以使用。
我的问题是-*的目的是什么?
它标记只能由位置提供的参数的结尾。必须将*
之后的参数指定为关键字参数。有关更多信息,请参见the PEP。