装饰器:
最基本的结构:
def decorator(): # 装饰
def wrapper(): # 被封装
pass
return wrapper
基本使用:
import time
def decorator(func):
def wrapper():
print(time.time())
func()
return wrapper
def f1():
print('This is function')
f = decorator(f1)
f()
结果:
1548663586.370373
This is function
具体效果:
加入一个 @ 符号语法糖。之后,可以不改变原有函数的格式,添加自己想要的格式如下:
import time
def decorator(func):
def wrapper():
print(time.time())
func()
return wrapper
@decorator
def f1():
print('This is function')
# f = decorator(f1)
# f()
#使用 @ 符号增加 语法糖
f1()
结果:
1548663940.191054
This is function
可变参数的使用:
* + 一个参数名: 如: args - > *args 来支持不同个数的参数传递
列:
import time
def decorator(func):
def wrapper(*args):
print(time.time())
func(*args)
return wrapper
@decorator
def f1():
print('This is function')
@decorator
def f2(func_name,func_name1):
print('This is function'+ func_name)
print('This is function'+ func_name1)
# f = decorator(f1)
# f()
#使用 @ 符号增加 语法糖
f2('I am 1','I am 2')
结果:
1548665004.118927
This is functionI am 1
This is functionI am 2
关键字参数的支持:
**kw 如: def f2(func_name,func_name1,**kw):
列:
import time
def decorator(func):
def wrapper(*args,**kw):
print(time.time())
func(*args,**kw) #这里去使用装饰进入值
return wrapper
# @decorator
# def f1():
# print('This is function')
@decorator
def f2(func_name,func_name1,**kw):
print('This is function'+ func_name)
print('This is function'+ func_name1)
print(kw)
# @decorator
# def f3(func_name,func_name1):
# print('This is function'+ func_name)
# print('This is function'+ func_name1)
# f = decorator(f1)
# f()
#使用 @ 符号增加 语法糖
f2('I am 1','I am 2',a = 1,b = 2)
结果:
1548665512.175861
This is functionI am 1
This is functionI am 2
{'a': 1, 'b': 2}