装饰器:decorator
通过 Python 的函数装饰器,我们可以在不改变函数源代码和调用方式的情况下,对功能进行更新,或者是进行相关指标的评估,例如函数的运行时间等。例子:
# OOP单一职责原则
# 开闭原则:扩展功能,但是修改关闭,不修改源代码
# decorator 装饰器,本身是一个嵌套函数
def decorator(target_func):
def __decorator():
print("Dress decorator")
target_func()
print("Take off decorator")
# print
return __decorator
@decorator
def target_func():
print("Hello!")
return
对于 decorator
来说还有以下两种情况:
- 被装饰函数携带参数
- 装饰器携带参数
以及这两种情况的组合。
被装饰函数携带参数
# target_func 被装饰函数
def decorator_for_paramfunc(target_func):
# param 被装饰函数参数
def __decorator(param):
print("Dress decorator")
target_func(param)
print("Take off decorator")
@decorator_for_paramfunc
def echo(message):
print(message)
装饰器携带参数
# args 装饰器参数
def decorator_with_param(args):
# target_func 被装饰函数
def _decorator(target_func):
# param 被装饰函数参数
def __decorator(param):
# 打印
print("decorator says %s" %(args))
print("Dress decorator")
target_func(param)
print("Take off decorator")
return __decorator
return _decorator
@decorator_with_param('hello')
def echo(message):
print(message)