装饰器是实现封闭开放原则的语法糖,python开源代码经常看到,特别是pytorch tensorflow scipy源码时经常看到,特意记录一下。
1、函数带参数装饰器:
def decorator(msg=None):
def print_content(func):
def wrapper(*args, **kwargs):
func(*args, **kwargs)
print(f"打印[{msg}]装饰器参数")
return wrapper
return print_content
@decorator(msg="function_1")
def function_1():
print("function_1内部执行")
if __name__ == '__main__':
function_1()
"""
function_1内部执行
打印[function_1]装饰器参数
"""
2、类带参数装饰器
从内到外执行
class Decorator:
def __init__(self, arg):
self.arg = arg
def __call__(self, fun_name):
def wrapper(*args):
print('传入装饰器参数:', self.arg)
fun_name(*args)
return wrapper
@Decorator('Decorator arg')
def function_1(arg):
print("function_1内部执行:{}".format(arg))
if __name__ == '__main__':
function_1('function_1')
"""
传入装饰器参数: Decorator arg
function_1内部执行:function_1
"""
3、多个装饰器:
def decorator_1(func):
def wrapper(*args, **kwargs):
func(*args, **kwargs)
print('decorator_1打印')
return wrapper
def decorator_2(func):
def wrapper(*args, **kwargs):
func(*args, **kwargs)
print('decorator_2打印')
return wrapper
def decorator_3(func):
def wrapper(*args, **kwargs):
func(*args, **kwargs)
print('decorator_3打印')
return wrapper
@decorator_1
@decorator_2
@decorator_3
def function_1():
print("function_1内部执行")
if __name__ == '__main__':
function_1()
"""
function_1内部执行
decorator_3打印
decorator_2打印
decorator_1打印
"""
文章介绍了Python中的装饰器,包括函数带参数的装饰器、类装饰器以及如何使用多个装饰器。装饰器是一种实现封闭开放原则的语法结构,在Python开源项目如pytorch、tensorflow和scipy中常见。示例展示了如何定义和使用这些装饰器,以及它们的执行顺序。
3624

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



