Python中装饰器的一个妙用

2019-10-05 08:43:41王冬梅

    full_file_name = 'dumps/%s/%s' % (dir_name,filename)
 
    if os.path.isfile(full_file_name):
        return eval(file(full_file_name,'r').read())
    else:
        return None
 
 
def set_dump_data(dir_name, url, data):
    if not os.path.isdir('dumps/'+dir_name):
        os.makedirs('dumps/'+dir_name)
 
    m = hashlib.md5(url)
    filename = m.hexdigest()
    full_file_name = 'dumps/%s/%s' % (dir_name,filename)
 
    f = file(full_file_name, 'w+')
    f.write(repr(data))
    f.close()
 
 
def deco_dump_data(func):
    def func_wrapper(url):
        data = get_dump_data(func.__name__,url)
        if data is not None:
            return data
 
        data = func(url)
        if data is not None:
            set_dump_data(func.__name__,url,data)
        return data
 
    return func_wrapper

然后,我们只需要在每个func_top,func_sub,func_bottom都加上deco_dump_data这个装饰器即可~~

搞定!这样做最大的好处在于,因为top,sub,bottom,每一层都会dump数据,所以比如某个sub层数据dump之后,是根本不会走到他所对应的bottom层的,减少了大量的开销!

OK,就这样~ 人生苦短,我用python!