python函数里面的装饰器和闭包的理解
2016-03-25 10:05
721 查看
最近看了看《python核心编程》感觉里面函数里面的一些高级主题中的函数的装饰器和闭包很有意思,所以特此记录下来,以后忘记的话可以回顾一下。
一python函数的装饰器
装饰器实际上是一类函数,它接受函数对象作为传入参数,返回的结果也是一个函数。这样就可以为传入的函数增加一些特性,比如:引入日志、增加计时逻辑来检测性能、给函数加入事务能力等。装饰器的语法以@开头,接着是装饰器函数的名字和可选参数,下一行开头就跟着被装饰的函数,如下所示:@decorator(args_of_decorator) #装饰器 def fun(args_of_decorator): #被装饰的函数 ... #具体实现内容下面实际举一个例子:
#coding=utf-8 from time import ctime,sleep #下面是一个典型的装饰器函数,可以输出被装饰函数被调用的时间和被装饰函数的名字 def df(func): def wf(): print '%s %s() called' % (ctime(),func.__name__); return func(); return wf; #下面用装饰器装饰一个普通函数 @df def f(): pass; #到这一步时,函数f()=df(f())=wf(),因此下面两次循环实际上执行了两次装饰器内部的wf函数 for i in range(2): sleep(1) f();运行结果为:
Tue Mar 22 21:37:35 2016 f() called Tue Mar 22 21:37:36 2016 f() called
二 python的闭包
闭包实际上就是指一个内部函数里面,对在外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包。比如上面的例子里面的的装饰器函数df()在定义时,里面又定义了一个内部函数wf(),在wf()里面使用了func这个变量(这个变量在wf()函数的外部作用域,但又不在全局作用域),这里的函数wf()就是一个闭包。相关文章推荐
- Python中的sorted函数以及operator.itemgetter函数
- python2.7:IOError: [Errno 2] No such file or directory:
- python 如何重载模块,用一个简单的例子来解释
- PHP + PYTHON 多任务多线程,后台运行,计划任务-实现方法
- Python信号处理模块signal
- python中字典(dict)常见用法
- python2.7:模块安装4种方法
- Python基础教程
- python写个图片爬虫
- python中元组(tuple)用法总结
- python
- 转载一篇python类的博文
- Python入门 之 dict
- Python-pip 安装失败问题解决
- 初始Python类
- Python基础教程之正则表达式基本语法以及re模块
- 用Python实现斐波那契(Fibonacci)函数
- python Django批量导入不重复数据
- python Django批量导入数据
- python Django框架实现自定义表单提交