1
简单来讲,可以不严谨地把Python的装饰器看做一个包装函数的函数。
比如,有一个函数:
def func():
print 'func() run.'
if '__main__' == __name__:
func()
运行后将输出:
func() run.
现在需要在函数运行前后打印一条日志, 但是又不希望或者没有权限修改函数内部的结构, 就可以用到装饰器(decorator):
def log(function):
def wrapper(*args, **kwargs):
print 'before function [%s()] run.' % function.__name__
rst = function(*args, **kwargs)
print 'after function [%s()] run.' % function.__name__
return rst
return wrapper
@log
def func():
print 'func() run.'
if '__main__' == __name__:
func()
对于原来的函数"func()"并没有做修改,而是给其使用了装饰器log,运行后的输出为:
before function [func()] run.
func() run.
after function [func()] run.
把"@log"放到func()函数
2
通常可以理解它是一个hook 的回调函数。
或者是理解成python 留给二次开发的一个内置API。 一般是用回调和hook 方式实现的。
3
首先十分不推荐这种做法, 会令程序难以维护.
其次, 多个装饰器是按照装饰器的顺序进行执行的.
如果你编写过装饰器, 你就应该知道, 其实装饰器就是把函数的名字传入进去, 在执行函数之前, 进行一些提前的处理.
例如下面这段代码, 自定义的装饰器
def add_schedid(handler_func):
"""
@handler_func: 请求处理函数
"""
@functools.wraps(handler_func)
def wrapper(self, *args, **kwargs):
"""
wrapper
"""
# handler_func就是所装饰的函数,可以在这里做一些真正函数执行前所需的处理,
handler_func(self, *args, **kwargs)
return wrapper
装饰器本身就是一个函数, 将所装饰的函数, 作为一个参数传进来, 然后在执行这个函数之前, 进行一个处理,这就是装饰器. 所以和正常函数执行顺序是一样的..
4
所谓装饰器就是把函数包装一下,为函数添加一些附加功能,装饰器就是一个函数,参数为被包装的函数,返回包装后的函数:你可以试下:12345678910111213def d(fp): def _d(*arg, **karg): print "do sth before fp.." r= fp(*arg, **karg) print "do sth after fp.." return r return _d @ddef f(): print "call f"#上面使用@d来表示装饰器和下面是一个意思#f = d(f)
5
闭包的返回的应该是函数本身,你直接返回wrappedFunc(),那就是把wrappedFunc执行的结果返回了,装饰器写法就是一个闭包,需要返回函数对象。
6
质量和信誉 做的好了以后就有的回头客了 其实你应该找个好的项目经理 3分设计七分做么~
7
选择意大利品牌阿里斯顿,它旗下的ARTES电热水器外观非常的时尚漂亮,能满足楼主的一切想象哦!
8
24 花 栅 吊 顶
本章适用于工业与民用建筑中花栅吊顶工程。
24.1 材料要求
24.1.1 38系列轻钢龙骨、格栅主骨、格栅副骨。
24.1.2 配件有吊挂件、连接件、插接件。
24.1.3 零配件:有吊杆、吊钩、弹簧片、角码、膨胀螺丝。
24.1.4 按设计要求可选用各种规格、颜色的格栅。
24.2 主要机具
24.2.1 电动机具:电锯、无齿锯、手枪钻、射钉枪、冲击电锤、电焊机。
24.2.2 手动机具:拉铆枪、钳子、螺丝刀、扳子、钢尺、钢水平尺、线坠等。
24.3 作业条件
24.3.1 吊顶工程在施工前应熟悉施工现场、图纸及设计说明。
24.3.2 施工前应按设计要求对房间的净高、洞口标高和吊顶内的管道、设备及其支架的标高进行交接检验完毕。
24.3.3 材料进场验收记录和复验报告,技术交底记录。
24.3.4 安装格栅前,吊顶内的管道、设备安装、检验、试压验收合格。吊顶前将棚内顶楼板按