装饰器

一个打印日志的装饰器

from functools import wraps
def log(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print "log: {} starting...".format(func.__name__)
        result = func(*args, **kwargs)
        print "log: {} ending...".format(func.__name__)
        return result
    return wrapper

@log
def foo():
    print "foo func"

foo()

一个实用的例子

计算代码运行时间的装饰器

import time
from functools import wraps
def timethis(func): 
    @wraps(func) 
    def wrapper(*args, **kwargs): 
        start = time.time() 
        result = func(*args, **kwargs) 
        end = time.time() 
        print(func.__name__, end-start) 
        return result 
    return wrapper

@timethis
def countdown(n): 
    while n > 0:
        n -= 1

countdown(100000) # countdown 0.008917808532714844

带参数的装饰器

from functools import wraps

def log(level,name=None):
    def decorate(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            print "[{} {}] log: {} starting...".format(level, name, func.__name__)
            result = func(*args, **kwargs)
            print "[{} {}] log: {} ending...".format(level, name, func.__name__)
            return result
        return wrapper
    return decorate
    
@log("DEBUG", name="web_app_1")
def foo():
    print "foo func"

foo()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容