"""
1.time:2020.08.12
2.thinking:①对无参数,无返回值的函数进行装饰
②对有参数,无返回值的函数进行装饰
③对不定长参数,无返回值的函数进行装饰:利用*args拆包和**kwargs
④对有参数,有返回值的函数进行装饰:通用装饰器
⑤多个函数有一个装饰器装饰
⑥多个装饰器装饰一个函数
⑦用类对函数进行装饰
"""
"""------①------"""
def set_func(func):
def call_func():
print('1')
func()
return call_func
@set_func
def test1():
print('2')
test1()
print('*'*50)
"""------②------"""
def set_func(func):
def call_func(aaa):
print('1')
func(aaa)
return call_func
@set_func
def test1(num):
print('2:%d' % num)
test1(1000)
print('*'*50)
"""------③------"""
def set_func(func):
def call_func(*args, **kwargs):
print('1')
func(*args, **kwargs)
return call_func
@set_func
def test1(num, *args, **kwargs):
print('2:%d' % num)
print(args)
print(kwargs)
print('')
test1(10)
test1(10, 100)
test1(10, 100, 1000, keys='hhh')
"""------④------"""
def set_func(func):
def call_func(*args, **kwargs):
print('---检测1---')
return func(*args, **kwargs)
return call_func
@set_func
def test1(num, *args, **kwargs):
return num
ret = test1(10, 20, 30)
print(ret)
print('*'*50)
"""------⑤------"""
def set_func(func):
def call_func(*args, **kwargs):
print('---装饰器功能---')
return func(*args, **kwargs)
return call_func
@set_func
def test1():
print('函数1')
@set_func
def test2():
print('函数2')
test1()
test2()
print('*'*50)
"""------⑥------"""
def set_func(func):
def call_func(*args, **kwargs):
print('---装饰器1功能---')
return func(*args, **kwargs)
return call_func
def set_func2(func):
def call_func(*args, **kwargs):
print('---装饰器2功能---')
return func(*args, **kwargs)
return call_func
@set_func
@set_func2
def test1():
print('~~~被装饰函数~~~')
test1()
print('*'*50)
(自学)装饰器的种类
最新推荐文章于 2024-09-05 10:28:02 发布