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) 实际是一个函数调用,此函数调用将返回一个装饰器。