Python cookbook进阶学习-元编程(一)
来源:互联网 发布:淘宝正义哥海外代购 编辑:程序博客网 时间:2024/06/13 10:33
一、在函数上添加包装器
import timefrom functools import wrapsdef timethis(func): ''' decorator that reports the execution time. ''' @wraps(func) def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(func.__name__, end-start) return result return wrapper@timethisdef countdown(n): while n > 0: n = n-1
使用内置装饰器
1.wraps保留函数元信息,能通过wrapped属性直接访问被包装函数,在底层访问到函数签名等信息。
2.property获取属性
3.setter和getter
4.classmethod类方法 staticmethod 静态方法
class Student(object): def __init__(self, name): self._name = name @property def name(self): return self._name @name.setter def name(self, value): if value is not None: self._name = value @classmethod def fun1(cls): pass @staticmethod def fun2(): pass
二、带参数的装饰器
from functools import wrapsimport loggingdef logged(level, name=None, message=None): def decorate(func): logname = name if name else func.__module__ log = logging.getLogger(logname) logmsg = message if message else func.__name__ @wraps(func) def wrapper(*args, **kwargs): log.log(level, logmsg) return func(*args, **kwargs) return wrapper return decorate@logged(logging.DEBUG)def add(x, y): return x+y@logged(logging.CRITICAL, 'example')def spam(): print('spam')
三、可自定义属性的装饰器
使用nonlocal
from functools import partial, wrapsimport loggingdef attach_wrapper(obj, func=None): if func is None: return partial(attach_wrapper, obj) setattr(obj, func.__name__, func) return funcdef logged(level, name=None, message=None): def decorate(func): logname = name if name else func.__module__ log = logging.getLogger(logname) logmsg = message if message else func.__name__ @wraps(func) def wrapper(*args, **kwargs): log.log(level, logmsg) return func(*args, **kwargs) @attach_wrapper(wrapper) def set_level(newlevel): nonlocal level level = newlevel @attach_wrapper(wrapper) def set_message(newmsg): nonlocal message message = newmsg return wrapper return decorate
使用例子
阅读全文
0 0
- Python cookbook进阶学习-元编程(一)
- Python cookbook进阶学习-函数
- Python cookbook 学习笔记一
- python-cookbook学习笔记一
- python cookbook(一) 文本
- python学习进阶(一)
- python数据类型(python cookbook读书笔记一)
- Python进阶学习笔记(一)
- python编程技巧--python--cookbook学习笔记(5)
- Python学习笔记(一)——编程0基础数据分析进阶之路
- Python cookbook学习
- 开始学习《python cookbook》
- 《PHP Cookbook》学习笔记(一)
- cookbook学习笔记一
- Python进阶(一)-初识Python数据元素:列表&元组
- python-cookbook学习笔记八 迭代器与生成器一
- Python进阶(一)
- python--进阶(一)
- 二叉树的遍历
- Combination Sum II
- 坚持#第191天~好了!注意了!人生的转折点!梦想的启航!云计算的开始!
- ReadMe
- 对字符串数组中的单词逆序输出
- Python cookbook进阶学习-元编程(一)
- hdu2255 二分图最佳匹配
- Jedis操作Redis模型
- 第三节循环语句和函数初识
- IEEE论文检测的字体未嵌入问题Times New Roman,Bold, Times New Roman,Italic is not embedded解决方法
- 设计模式从零开始——简单工厂模式
- 9.23【NOIP模拟总结】
- ReadMe
- XTU C语言程序设计实践作业4