python 装置器

来源:互联网 发布:淘宝千牛是什么 编辑:程序博客网 时间:2024/04/28 06:52

1 解决的问题

1 解决调用函数时想使用额外的附加条件时的复用问题2 解决函数属性发生改变的问题

2 代码

import loggingdef use_logging(func):    def wrapper(*args,**kwargs):        logging.warn("%s in running" % func.__name__)        return func(*args,**kwargs)    return wrapperdef bar():    print ("i am bar")bar =use_logging(bar)print bar()print "bar.__name__",bar.__name__@use_loggingdef foo():    print "i am foo"print foo()print "foo.__name__",foo.__name__from functools import wrapsdef logged(func):    @wraps(func)    def with_logging(*args,**kwargs):        print func.__name__ + " was called"        return func(*args,**kwargs)    return with_logging@loggeddef f(x):    return x+x*xprint f(1)print "f.__name__",f.__name__==============     结果==============i am barWARNING:root:bar in runningNoneWARNING:root:foo in running #解决调用函数时想使用额外的附加条件时的复用问题bar.__name__ wrapper #解决函数属性发生改变的问题i am fooNonefoo.__name__ wrapper #解决函数属性发生改变的问题f was called #解决调用函数时想使用额外的附加条件时的复用问题2f.__name__ f #解决函数属性发生改变的问题

参考https://www.zhihu.com/question/26930016

原创粉丝点击