首页 > 代码库 > python高级编程-Part3 修饰器前奏
python高级编程-Part3 修饰器前奏
修饰器用来包装函数,增加额外的功能,而且应能够修饰一批函数,减少代码重用。
简单的修饰器
一个函数接收函数对象作为参数,并且返回函数对象,这样的函数可以成为一个修饰器,形如下面的定义:
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
本文出自 “无名” 博客,请务必保留此出处http://xdzw608.blog.51cto.com/4812210/1603620
python高级编程-Part3 修饰器前奏
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。