python高级编程-Part3 修饰器
短信预约 -IT技能 免费直播动态提醒
修饰器用来包装函数,增加额外的功能,而且应能够修饰一批函数,减少代码重用。
简单的修饰器
一个函数接收函数对象作为参数,并且返回函数对象,这样的函数可以成为一个修饰器,形如下面的定义:
def deco(func):
def _deco(*args):
print "do something"
func(*args)
return _deco
上面的修饰器中,func称为被修饰的函数,在执行func前做一些额外的初始化工作。
修饰器定义完成后,使用@去修饰函数,如下面所示:
@deco #实际相当于执行了f = deco(f)
def f(x):
print x
经过上述处理后,查看f的函数名已经变成了“_deco”
print f
print deco(f)
运行结果是:
<function _deco at 0x00000000022314A8>
<function _deco at 0x0000000002231518>
说明修饰完成后,f是deco(f)的浅复制版本。
接着,当我们调用f("hello")时,将会得到下面的输出:
do something
hello
带参数的修饰器
修饰器是一个函数形式,当然可以传入参数,此时,必须多加一层嵌套用来接收参数,如下:
def deco_args(a, b): # a,b是修饰器需要的参数
def deco(func):
def _deco(*args): # *args是被包裹的函数需要的参数
print "do something"
func(*args)
#do something
return _deco
return deco # 此处需闭包
@deco_args(1,2) # 相当于f = deco_args(1,2)(f)
def f(x):
print x
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341