I am going through the excellent Python 3 Metaprogramming tutorial by David Beazley.
In it there is a decorator that looks as follows (slide 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
In the parameters of the function there is a * that is between the keyword parameter func
and prefix
. I have tested the decorator with or without the star and in both cases it works.
My question is - what if any, is the purpose of the *?