python的闭包与decorator 的关系
2015-06-03 16:29
573 查看
python的闭包 与 decorator 的关系:
我们可以看到:
两者返回的格式完全相同。所以说:装饰器就是一种闭包!
我们再回想一下装饰器的概念:对函数(参数,返回值等)进行加工处理,生成一个功能增强版的一个函数。再看看闭包的概念,这个增强版的函数不就是我们配置之后的函数吗?区别在于,装饰器的参数是一个函数或类,专门对类或函数进行加工处理。
def makebold(fn): def wrapped(): #print "makebold " , fn return "<br>" + fn() + "</br>" return wrapped def makeitalic(fn): def wrapped(): #print "makeitalici " ,fn return "<i>" + fn() + "</i>" return wrapped @makebold @makeitalic def hello(): return "hello world" def goodbye(): return "goodbye" if __name__ == '__main__': print hello() # return <br><i>hello world</i></br> italic = makeitalic(goodbye) bold = makebold(italic) print bold() # return <br><i>goodbye</i></br>
我们可以看到:
print hello()返回的为:<br><i>hello world</i></br>
print bold()返回的为:<br><i>goodbye</i></br>
两者返回的格式完全相同。所以说:装饰器就是一种闭包!
我们再回想一下装饰器的概念:对函数(参数,返回值等)进行加工处理,生成一个功能增强版的一个函数。再看看闭包的概念,这个增强版的函数不就是我们配置之后的函数吗?区别在于,装饰器的参数是一个函数或类,专门对类或函数进行加工处理。
相关文章推荐
- python中的enumerate学习
- Openstack: python API “how to download image from glance using the python api”
- Python中__getitem__()和__setitem__()的使用实例
- 使用virtualenv在ubuntu上搭建python 3开发环境
- Python datetime time 常用操作
- UMeditor在线web编辑器 -- python版
- python实现支持目录FTP上传下载文件的方法
- 选择 Python3.x or Python2.x
- python实现的DES加密算法和3DES加密算法实例
- Python 代码调试技巧
- 如何在没有root权限的情况下安装numpy 和scipy python module
- Python 清理HTML标签相似PHP的strip_tags函数功能(二)
- python获取各操作系统硬件信息的方法
- Python 虚拟环境:virtualenv
- 经典排序算法总结与实现 ---python
- python中的zip学习
- Python Note
- Installing python-ldap in Ubuntu
- python 基础学习 正则表达式2(使用)
- 在 Mac OS X 10.10 安装 pyenv 的一个小坑