Python基础17--装饰器
2015-03-14 22:59
375 查看
Python基础 装饰器
Python的 decorator 本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数。函数的属性
函数对象有一个name属性,可以取得到函数的名字f = abs print f.__name__ # 结果为'abs'
无参装饰器
声明装饰器函数def log(f): def fn(*args, **kw): print ‘call ‘ + f.__name__ + '()…' return f(*args, **kw) return fn
使用装饰器
@log def now(): print '2013-12-25' now() print now.__name__ # 结果为'fn'
实质
在定义函数时设置装饰器,实质上执行了以下功能
now = log(now)
带参装饰器
声明def log(text): def decorator(func): def wrapper(*args, **kw): print '%s %s():' % (text, func.__name__) return func(*args, **kw) return wrapper return decorator
调用
@log('execute') def now(): print '2013-12-25' now() print now.__name__ # 结果为'wrapper'
实质
now = log('execute')(now)
完善 返回函数的属性
定义import functools def log(func): @functools.wraps(func) # 指定返回函数属性 def wrapper(*args, **kw): print 'call %s():' % func.__name__ return func(*args, **kw) return wrapper
调用
@log('execute') def now(): print '2013-12-25' print now.__name__ # 结果为'now'
实质
now = log(now)
如果不添加
@functools.wraps(func),返回值其实是
wrapper函数,即
now = wrapper,所以
now.__name__值为
wrapper
相关文章推荐
- python基础教程_学习笔记17:标准库:一些最爱——time
- 2015/9/21 Python基础(17):绑定和方法调用
- Python基础-装饰器
- python基础——装饰器
- 【脚本语言系列】关于Python基础知识装饰器,你需要知道的事
- bisect模块 分类: python基础学习 python 2013-06-28 17:58 288人阅读 评论(0) 收藏
- 关于python的基础知识17 -- 列表、数组和矩阵
- Py修行路 python基础 (十)装饰器
- python基础—(高阶,匿名,偏)函数 | 装饰器
- <python全栈开发基础>学习过程笔记【17d】生成器
- Python基础(装饰器)
- Python——装饰器基础
- 我的Python成长之路---第五天---Python基础(17)---2016年1月30日(晴)
- Python基础-装饰器
- python基础——装饰器
- Python基础:13装饰器
- 零基础入门学习Python(17):对象(2)
- Python全栈开发之17、tornado和web基础知识
- Python 基础 —— 装饰器(2)
- Python基础-装饰器