在上篇基础(1)中,我写了一个装饰器及使用方法,但是如果遇到一个函数带返回值的话,就不好使了,因此重写一个装饰器如下:

#basic2.py#coding:utf-8def auth(func):    def inner(*arg, **kwargs):        print 'before'        temp = func(*arg,**kwargs) #这行是关键,func相当于fetch_server_list        print 'after'        return temp   #相当于返回fetch_server_list的值,又由于原函数fetch_server_list的值相当于返回 server_list的值,所以最终能得到 ['a1','a2','a3']。    return inner@authdef fetch_server_list(arg):    serve_list = ['a1','a2','a3']    return serve_list

调用这个装饰器:

#b2.pyimport basic2ret_list = basic2.fetch_server_list('test')print ret_list

执行结果:

#python b2.pybeforeafter['a1', 'a2', 'a3']