雪峰老师救命
Topic source又碰见一个例子,不知道怎么正确理解。
def logit(func):
@wraps(func)
def with_logging(*args, **kwargs):
print(func.__name__ + " was called")
return func(*args, **kwargs)
return with_logging
@logit
def addition_func(x):
return x+x
运行结果:
result=addition_func(4)
addition_func was called
问题:
return func(*args, **kwargs)这一句不起作用吗?
- 1
renjie0310
def before(func):
def wrapper(*args, **kwargs):
print('Before function called.')
return func(*args, **kwargs)
return wrapper
def after(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print('After function called.')
return result
return wrapper
@after
@before
def test():
print(3)
上面是源代码:
执行结果是:
Before function called.
3
After function called.
问题:
1、after函数中result = func(*args, **kwargs),return result,我认为应该返回3,但是什么也不返回,但是return func(*args, **kwargs)却能返回。
2、我把after函数改造了一下,
def after(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print('After function called.')
print(type( result))
print(type(func(*args, **kwargs)))
return wrapper
执行结果是:
@after
@before
def test():
print(3)
结果:
Before function called.
3
After function called.
<class 'NoneType'>
Before function called.
3
<class 'NoneType'>
有点摸不着头脑了,为什么后面又执行了一次before,希望雪峰老师给讲讲,到底那的问题。急盼!!!!!