Python使用偏函数与类实现装饰器
2024-10-20 20:46:48
# -*- 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
谢谢!
最新文章
- python--django项目如何设置用自己的iP地址访问项目
- Poj2479 &; Poj 2593
- hdu 3472 HS BDC(混合路的欧拉路径)
- 缺jstl.jar包导致的代码出现异常
- COJ968 WZJ的数据结构(负三十二)
- String 转Clob
- easyui datagriad 框架 自适应r
- freemarker中遍历list<;map<;String,String>;>;
- ORACLE RMAN介绍
- log4j之log4j2.xml使用
- 【Linux 操作系统】Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用
- [debian]use ISO as debian apt source / 使用ISO文件作为apt源
- scrapy 基础
- 分布式缓存技术redis系列(二)——详细讲解redis数据结构(内存模型)以及常用命令
- 深度学习原理与框架-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(读
- PB常用函数
- postman参数化 接口响应数据获取符合条件的内容参数化给后面的接口使用
- 这家伙好像还不错 ZH奶酪-张贺
- 根据location地址,在导航栏高亮显示当前页面
- Java并发案例04---Future和 FutureTask
热门文章
- Python_类的私有属性、私有方法
- 使用Arduino连接HC-SR04超声波距离传感器的方法
- 51nod 2489 小b和灯泡
- SSH——ssh_exchange_identification: read: Connection reset by peer
- Linux——配置maven
- django-安装nginx及fastdfs-nginx-module
- @getMapping和@postMapping,@RestController 区别
- BM递推杜教版【扩展】
- Learning Vector Quantization
- 使用WinDbg调试入门(用户模式)