装饰器

1.自身不传入参数的装饰器(采用两层函数定义装饰器)

def login(func):
    def wrapper(*args, **kwargs):
        print("function name: %s"% func.__name__)
        return func(*args, **kwargs)
    return wrapper

@login
def f():
    print("inside decorator!")

if __name__ == '__main__':
    f()

>>>function name: f
>>>inside decorator!
 

2. 带参数的装饰器(采用两层函数定义装饰器)

def debug(func):
def wrapper(*args, **kwargs): # 指定宇宙无敌参数
print("[DEBUG]: enter {}()".format(func.__name__))
print('Prepare and say...')
return func(*args, **kwargs)
return wrapper # 返回

@debug
def say(something):
print("hello {}!".format(something))


if __name__ == '__main__':
say('this is good')

>>>[DEBUG]: enter say()
>>>Prepare and say...
>>>hello this is good!

3. 自身传入参数的装饰器(采用三层函数定义装饰器)

def login(text):
    def decorator(func):
        def wrapper(*args,**kargs):
            print('%s----%s'%(text, func.__name__))
            return func(*args,**kargs)
        return wrapper
    return decorator

# 等价于 ==> (login(text))(f) ==> 返回 wrapper
@login('this is a parameter of decorator')
def f():
    print('2019-06-13')

# 等价于 ==> (login(text))(f)() ==> 调用 wrapper() 并返回 f()
f()

>>>输出:
>>> this is a parameter of decorator----f
>>> 2019-06-13

 4. 类的装饰器, 等续......

posted @ 2020-12-27 18:45  Sara软件测试  阅读(70)  评论(0)    收藏  举报