# 装饰器
# 1、 普通装饰器
# 定义闭包
def func_out(func):
def func_in():
print(f'调用函数使用开始!')
print(f'在调用前先修饰')
func()
print(f'在调用后修饰函数')
return func_in
@func_out
def test ():
print(f'测试函数')
test()
''' 返回结果:
调用函数使用开始!
在调用前先修饰
测试函数
在调用后修饰函数
'''
带参数的修饰器
# 2、带参数的函数使用修饰器
def func_out(func):
def func_in (*args, **kwargs):
print(f'调用函数使用开始')
print(f'元组参数打印:{args},字典参数打印:{kwargs}')
res = func(*args, **kwargs)
print(f'在调用后修饰函数')
return res
return func_in
@func_out
def test(a, b, c):
print(f'带参数调用')
test(11, 2, 3)
''' 返回结果:
调用函数使用开始
元组参数打印:(11, 2, 3),字典参数打印:{}
带参数调用
在调用后修饰函数
'''
类修饰器
# 3、类修饰符
class Test():
__attr = '我是一个测试类'
def __init__(self, func):
self.__func = func
# 当类修饰符的函数被调用时 (func_test()) 就会执行__call__方法
def __call__(self, *args, **kwargs):
print(f'类装饰器被使用了 现在调用的函数名称是{self.__func}' )
self.__func()
print(f'调用结束')
@Test
def func_test():
print(f'你好我尝试调用')
func_test()
''' 返回结果:
类装饰器被使用了 现在调用的函数名称是<function func_test at 0x00000000003A6160> __main__
你好我尝试调用
调用结束
'''
带参数的装饰器
# 4、带参数的装饰器
def func_flag (flag):
def func_out(func):
def func_in(*args, **kwargs):
print(f'调用函数使用开始')
if (flag == '+'):
print(f' run + ')
else :
print(f' run ...')
res = func()
print(f"在调用后修饰函数")
return res
return func_in
return func_out
@func_flag('-')
def demo():
print('带参数的装饰器')
demo()
本文详细介绍了Python装饰器的四种类型:普通装饰器、带参数的装饰器、类装饰器以及带参数的装饰器,通过实例展示了它们的使用方式和功能,帮助读者深入理解Python装饰器的概念及其应用。
1313

被折叠的 条评论
为什么被折叠?



