Python-2.11 functools里wraps包

通过语法糖、装饰器的方法将原函数名指向的内存地址偷梁换柱成wrapper函数;
但是当调被装饰对象的内置函数时,仍然显示的是wrapper,伪装的并不彻底。

import time


def outter(func):
    def wrapper(*args, **kwargs):
        '''这是个主功能'''
        start = time.time()
        func(*args, **kwargs)
        stop = time.time()
        print(stop - start)

    return wrapper


@outter  # index=outter(index)
def index(x, y, z):
    time.sleep(3)
    print(f'index {x} {y} {z}')


@outter  # home=outter(home)
def home(a):
    time.sleep(1)
    print(f'这是一个home函数,它的参数是:{a} ')


index(1, 2, 3)
home('winnie')
print(index.__name__)
print(index.__doc__)

结果:

index 1 2 3
3.00010347366333
这是一个home函数,它的参数是:winnie 
1.0002923011779785
wrapper
这是个wrapper函数
这是个主功能

将wrapper做的跟原函数一样,需要导入wraps包

from functools import wraps
import time


def outter(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        '''这是个wrapper函数'''
        start = time.time()
        func(*args, **kwargs)
        stop = time.time()
        print(stop - start)

    return wrapper


@outter  # index=outter(index)
def index(x, y, z):
    '''这是个index函数'''
    time.sleep(3)
    print(f'index {x} {y} {z}')


@outter  # home=outter(home)
def home(a):
    time.sleep(1)
    print(f'这是一个home函数,它的参数是:{a} ')


index(1, 2, 3)
home('winnie')
print(index.__name__)
print(index.__doc__)

结果:

index 1 2 3
3.000398635864258
这是一个home函数,它的参数是:winnie 
1.000969409942627
index
这是个index函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值