测试环境:Python3.6.2 + win10 +  Pycharm2017.3


 装饰器之functools模块的wraps的用途:

首先我们先写一个装饰器

# 探索functools模块wraps装饰器的用途
from functools import wraps


def trace(func):
    """ 装饰器 """

    # @wraps(func)
    def callf(*args, **kwargs):
        """ A wrapper function """
        print("Calling function:{}".format(func.__name__))  # Calling function:foo
        res = func(*args, **kwargs)
        print("Return value:{}".format(res))  # Return value:9
        return res

    return callf


@trace
def foo(x):
    """ 返回给定数字的平方 """
    return x * x


if __name__ == '__main__':
    print(foo(3))  # 9
    print(foo.__doc__)
    help(foo)
    print(foo.__name__)
    # print(foo.__globals__)
    t = trace(foo)
    print(t)
打印结果:
Calling function:foo
Return value:9
9
 A wrapper function 
Help on function callf in module __main__:

callf(*args, **kwargs)
    A wrapper function

callf
<function trace.<locals>.callf at 0x0000022F744D8730>
不带wraps的装饰器示例

相关文章: