您的位置:首页 > 编程语言 > Python开发

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()就是一个闭包。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: