Python装饰器模板

装饰器:在不修改原函数的代码和调用方式的前提下 为原函数添加额外的功能

无参装饰器模板

from functools import wraps


def outter(func):
    @wraps(func)  # 统一处理原函数属性
    def inner(*args, **kwargs):
        print('装饰后额外提供的功能1', args)
        res = func(*args, **kwargs)
        # 1> func 是原函数的内存地址
        # 2> *args, **kwargs 原函数的参数
        # 3> res 原函数的返回值
        print('装饰后额外提供的功能2', args)
        return res

    return inner


@outter
# 1、person = outter(person)
def person(name):  # (1)未修改原函数代码
    '''person function'''
    print('原函数 {}'.format(name))


# 2、查看伪装的是否与被装饰的函数一模一样
print('person.__doc__ >>> ', person.__doc__)
print('person.__name__ >>> ', person.__name__)

# 3、person(name)  # (2)调用方式不变
person('haha-无参装饰器')  # (3)额外增加了功能

有参装饰器模板

from functools import wraps


def auth(data_type):
    def outter(func):
        @wraps(func)	# 统一处理原函数属性
        def inner(*args, **kwargs):
            print('装饰后额外提供的功能1', args)
            res = func(*args, **kwargs)
            # 1> func 是原函数的内存地址
            # 2> *args, **kwargs 原函数的参数
            # 3> res 原函数的返回值
            print('装饰后额外提供的功能2', args)
            return res

        return inner

    return outter


@auth('file')
# 1、@ + auth('file')
# 2、@outter
# 3、login = outter(login)
def login(name, passwd):  # (1)未修改原函数代码
    '''login function'''
    print('原函数 {} {}'.format(name, passwd))


# 4、查看伪装的是否与被装饰的函数一模一样
print('login.__doc__ >>> ', login.__doc__)
print('login.__name__ >>> ', login.__name__)

# 5、login(name,passwd) 	# (2)调用方式不变
login('haha-有参装饰器', 123)  # (3)额外增加了功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值