Discuss / Python / 使用装饰器

使用装饰器

Topic source

import functools

def log(text):

    if isinstance(text,str):

        def decorator(func):

            @functools.wraps(func)

            def wrapper(*args, **kw):

                print('%s %s():' % (text, func.__name__))

                print('begin call')

                a = func(*args, **kw)

                print('end call')

return a

               # return func(*args, **kw) 如果是return 这个内容是又执行了一编结果。跟return a 有什么区别呢。

            return wrapper

        return decorator

    else:

        @functools.wraps(text)

        def wrapper(*args, **kw):

            print('begin call')

            a = func(*args, **kw)

            print('end call')

            return a

        return wrapper

@log('execute')

def now1():

    print('2015-3-25')

@log('')

def now2():

    print('2015-3-25')

print(now1())

print(now2())

执行下结果

execute now1():

begin call

2015-3-25

end call

2015-3-25

None

begin call

2015-3-25

end call

None

上面有人写了这样的答案,我按着思路原路写了下,看执行结果,如果是字符串的话,now1执行了两遍,now2只执行了一遍。差别就在

 a = func(*args, **kw)

 return a

 return func(*args, **kw) 

我不明白:return 函数和 return a 的区别


  • 1

Reply