python装饰器
装饰器
- 装饰器就是一个闭包.
- 在函数中再嵌套一个函数,并且引用外部函数的变量,就是一个闭包.
def outer(x):
def inner(y):
return x + y
return inner
print(outer(6)(5))
不使用装饰器
使用装饰器
def func1():
print("我是func1函数")
value = (11,22,33,44)
return value
result = func1()
print(result)
def func2():
print("我是func2函数")
value = (11,22,33,44)
return value
result = func2()
print(result)
def func3():
print("我是func3函数")
value = (11,22,33,44)
return value
result = func3()
print(result)
def outer(origin):
def inner():
print('before')
res = origin()
print('after')
return res
return inner
# @outer 类似于 func1 = outer(func1)
@outer
def func1():
print("我是func1函数")
value = (11, 22, 33, 44)
return value
@outer
def func2():
print("我是func2函数")
value = (11, 22, 33, 44)
return value
@outer
def func3():
print("我是func3函数")
value = (11, 22, 33, 44)
return value
func1()
func2()
func3()
代码示例
装饰器直接写法
装饰器语法糖写法
import time
def count_time(func):
def wrapper(*args, **kwargs):
t1 = time.time()
func(*args, **kwargs)
print(func.__name__, time.time() - t1)
return wrapper
def baiyu():
print('baiyu')
time.sleep(2)
if __name__ == '__main__':
baiyu = count_time(baiyu)
baiyu()
# Output:
# baiyu
# baiyu 2.000133752822876
import time
def count_time(func):
def wrapper(*args, **kwargs):
t1 = time.time()
func(*args, **kwargs)
print(func.__name__, time.time() - t1)
return wrapper
@count_time
def baiyu():
print('baiyu')
time.sleep(2)
if __name__ == '__main__':
baiyu()
# Output:
# baiyu
# baiyu 2.000133752822876
在线测试