5. 带参数的装饰器
语法
@装饰器 <换行>
def 被装饰函数名(形参列表):
语句块
说明
装饰器是个表达式,此表达式一定要返回带有一个参数的可被调用的函数(或对象)。
例如
def mydeco(fn):
def wrap(*args, **kwargs):
...
return wrap
示例
# 写一个装饰器,让被装饰函数重复调用指定的次数n
def repeat(n):
def mydeco(fn):
def wrap(*args, **kwargs):
for x in range(n):
fn(*args, **kwargs)
return wrap
return mydeco
@repeat(5)
def welcome(name):
print('你好:', name)
@repeat(3)
def bye():
print('再见')
welcome('Python!')
bye()
上述程序中 repeat(5) 实际是一个函数调用,此函数调用将返回一个装饰器。