# -*- coding: utf-8 -*-
# author:baoshan
# python对某个对象是否能通过装饰器形式使用只有一个要求:decorator必须是一个可被调用的对象。
# 我们最熟悉的就是函数了
# 除函数之外,类也可以是callable对象,只要实现了__call__函数。 # 如下DelayFunc是一个实现了__call__的类,delay返回一个偏函数,在这里delay就可以作为一个装饰器 import time
import functools class DelayFunc:
def __init__(self, duration, func):
self.duration = duration
self.func = func def __call__(self, *args, **kwargs):
print('Wait for {duration} seconds...'.format(duration=self.duration))
time.sleep(self.duration)
return self.func(*args, **kwargs) def eager_call(self, *args, **kwargs):
print('Call without delay')
return self.func(*args, **kwargs) def delay(duration):
"""
装饰器:推迟某个函数的执行。
同时提供 .eager_call方法立即执行
"""
# 此处为了避免定义额外函数,直接调用functools.partial帮助构造
return functools.partial(DelayFunc, duration) @delay(duration=2)
def add(a, b):
return a + b print(add)
print('-'*20)
print(add(3,5))
print('-'*20)
print(add.func)

输出结果:

<__main__.DelayFunc object at 0x0000029A5B61DA58>
--------------------
Wait for 2 seconds...
8
--------------------
<function add at 0x0000029A627FDD08>

参考自:https://zhuanlan.zhihu.com/p/65968462

谢谢!

最新文章

  1. python--django项目如何设置用自己的iP地址访问项目
  2. Poj2479 &amp; Poj 2593
  3. hdu 3472 HS BDC(混合路的欧拉路径)
  4. 缺jstl.jar包导致的代码出现异常
  5. COJ968 WZJ的数据结构(负三十二)
  6. String 转Clob
  7. easyui datagriad 框架 自适应r
  8. freemarker中遍历list&lt;map&lt;String,String&gt;&gt;
  9. ORACLE RMAN介绍
  10. log4j之log4j2.xml使用
  11. 【Linux 操作系统】Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用
  12. [debian]use ISO as debian apt source / 使用ISO文件作为apt源
  13. scrapy 基础
  14. 分布式缓存技术redis系列(二)——详细讲解redis数据结构(内存模型)以及常用命令
  15. 深度学习原理与框架-Tfrecord数据集的读取与训练(代码) 1.tf.train.batch(获取batch图片) 2.tf.image.resize_image_with_crop_or_pad(图片压缩) 3.tf.train.per_image_stand..(图片标准化) 4.tf.train.string_input_producer(字符串入队列) 5.tf.TFRecord(读
  16. PB常用函数
  17. postman参数化 接口响应数据获取符合条件的内容参数化给后面的接口使用
  18. 这家伙好像还不错 ZH奶酪-张贺
  19. 根据location地址,在导航栏高亮显示当前页面
  20. Java并发案例04---Future和 FutureTask

热门文章

  1. Python_类的私有属性、私有方法
  2. 使用Arduino连接HC-SR04超声波距离传感器的方法
  3. 51nod 2489 小b和灯泡
  4. SSH——ssh_exchange_identification: read: Connection reset by peer
  5. Linux——配置maven
  6. django-安装nginx及fastdfs-nginx-module
  7. @getMapping和@postMapping,@RestController 区别
  8. BM递推杜教版【扩展】
  9. Learning Vector Quantization
  10. 使用WinDbg调试入门(用户模式)