【python进阶教程】深入理解python装饰器,装饰器初识、使用场景及作用
文章目录
在python中 叫做装饰器
在Java中 叫做注解
作用:想为多个函数,统一添加某个功能,计时统计、记录日志、缓存运算 在一个原函数的基础上添加了新功能,生成了一个新的函数,代替原函数
好处和使用场景的
# 从代码的稳定性来说
# 如果想要对某一个被封装的单元,比如说过是函数,做出一个代码上的修改的话,我们可以不去修改具体的实现,而是通过装饰器的这种形式,来改变这个函数的行为
# 增加了代码的复用性
编程的开闭原则:对修改是封闭的,对扩展时开放的
模拟装饰器
给函数添加相同的模块
import time
def f1():
print('This is a function ')
def f2():
print('This is a function ')
def print_time(func):
print(time.time())
func()
print_time(f1)
print_time(f2)
装饰器的实现
没有参数的情况
import time
def decorator(func):
def wrapper():
print(time.time())
func()
return wrapper
方式二: 使用@语法糖
@decorator
def f1():
print('This is a function ')
f1()
方式一
# f = decorator(f1)
# f()
有参数的情况(可以支持不同参数个数)
多个参数
import time
def decorator(func):
def wrapper(*args, **kw):
print(time.time())
func(*args, **kw)
return wrapper
使用@语法糖
@decorator
def f1(func_name):
print('This is a function ' + func_name)
@decorator
def f2(func_name1, func_name2):
print('This is a function ' + func_name1 + ' and ' + func_name2)
@decorator
def f3(func_name1, func_name2, **kw):
print('This is a function ' + func_name1 + ' and ' + func_name2)
print(kw)
f3('test_func1','test_func2', a=1, b=2, c=0)
f1('test_func')
f2('test_func1','test_func2')