Discuss / Python / 雪峰老师救命

雪峰老师救命

Topic source

renjie0310

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

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,希望雪峰老师给讲讲,到底那的问题。急盼!!!!!

renjie0310

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

又碰见一个例子,不知道怎么正确理解。

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

Reply