Discuss / Python / 请问这两种写法有何区别

请问这两种写法有何区别

Topic source

taogebuaa

#1 Created at ... [Delete] [Delete and Lock User]
def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper

上面这个是给出的例子

def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        func(*args, **kw)
    return wrapper

这个是把wrapper函数的 return去掉,结果是一样的,请问有何区别

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

你把原函数return 1然后试试wrapper有和没有return就知道区别了

一个有返回值一个没有返回值,因为此处全是输出,返回值看起来没有什么意义,所以你觉得没差别,但是你将原函数改成一个返回值有意义的,那么第二个方法中wrapper函数接收不到返回值,最后结果你接受输出一下应该是NULL...

_Jo先生

#4 Created at ... [Delete] [Delete and Lock User]

前面一排看下来都没有return func的值 这层终于看到博主大人了 Orz


  • 1

Reply