# 装饰器,C# 叫特性,Java叫注解
# decorator:装饰的意思
# wrapper:封装的意思
# 如果我们想对某一个封装的单元(函数)做一个代码上的修改
# 可以不去修改具体的代码上的实现,可以通过装饰器的形式改变函数的行为
# 从代码的复用性上来说,可以把这些功能通过装饰器强加在一个函数上
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):
print(time.time())
func(*args)
return wrapper
@decorator
def f1(func_name):
print('This is a function name' + func_name)
@decorator
def f2(func_name1,func_name2):
print('This is a function name ' + func_name1)
print('This is a function name ' + func_name2)
f1('test func')
f2('test1','test2')
# 让装饰器可以支持函数有多个参数
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 name' + func_name)
@decorator
def f2(func_name1,func_name2):
print('This is a function name ' + func_name1)
print('This is a function name ' + func_name2)
@decorator
def f3(func_name1,func_name2,**kw):
print('This is a function name ' + func_name1)
print('This is a function name ' + func_name2)
print(kw)
f1('test func')
f2('test1','test2')
f3('test1','test2',a=1,b=2,c='123')