关于 Python 装饰器的一些理解
装饰器
- 本质是一个接受参数为函数的函数。
- 作用:向已实现的方法添加附加的通用函数,如日志记录和运行计时。
不带参数的装饰器,不用@
# 不带参数的装饰器 def deco_test(func): def wrapper(*args, **kwargs): print("before function") f = func(*args, **kwargs) print("after function") return f return wrapper
def do_something(a,b,c): print(a) time.sleep(1) print(b) time.sleep(1) print(c) return a
if __name__ == '__main__': # 不用@ f = deco_test(do_something)("1","2","3")
相当于在 do_something 函数外面套了两个输出:before function 和 after function。#输出 before function 1 2 3 after function
# 不带参数的装饰器 def deco_test(func): def wrapper(*args, **kwargs): print("before function") f = func(*args, **kwargs) print("after function") return f return wrapper
@deco_test def do_something(a,b,c): print(a) time.sleep(1) print(b) time.sleep(1) print(c) return a
if __name__ == '__main__': # 使用@ f = do_something("1","2","3")
相当于执行 do_something 函数的时候,因为有 @ 的原因,已经知道有一层装饰器 deco_test,所以不需要再单独写 deco_test(do_something) 了。#输出 before function 1 2 3 after function
在函数do_something()
外面先套一层deco_test()
装饰器,再在最外面套一层logging()
装饰器。
本作品采用《CC 协议》,转载必须注明作者和本文链接