赞
踩
书《Python核心编程(第二版).pdf》,作者:Wesley J. Chun
装饰器
====
1. 无参数的装饰器
@deco
def foo(): pass
等价于:
foo = deco(foo)
2. 带参数的装饰器
@decomaker(deco_args)
def foo(): pass
等价于:
foo = decomaker(deco_args)(foo)
3. 含有多个装饰器
@deco1(deco_arg)
@deco2
def func(): pass
等价于:
func = deco1(deco_arg)(deco2(func))
4. 装饰器的用途
(1)引入日志
(2)增加计时逻辑来检测性能
(3)给函数加入事务的能力
#!/usr/bin/python # -*- coding: UTF-8 -*- """ @author: @file:deco.py @time:2022-03-09 17:39 """ # 通过显示函数执行的时间“装饰”了一个函数。即时间戳装饰。 # 例11.2 使用函数装饰器的例子(deco.py) from time import ctime, sleep # 显示何时调用函数的时间戳装饰器。 # 它定义了一个内部的函数wrappedFunc(),该函数增加了时间戳以及调用了目标函数。 # 装饰器的返回值是一个“包装了”的函数。 def tsfunc(func): def wrappedFunc(): print('[%s] %s() called' % (ctime(), func.__name__)) return func() return wrappedFunc @tsfunc def foo(): # pass print("Hello world!") foo() sleep(4) for i in range(2): sleep(1) foo() """ 运行结果如下: [Wed Mar 9 18:06:58 2022] foo() called Hello world! [Wed Mar 9 18:07:03 2022] foo() called Hello world! [Wed Mar 9 18:07:04 2022] foo() called Hello world! """
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。