理解python装饰器

关键点

装饰器是一个函数。它的输入是一个函数I,输出也是一个函数O, 函数I表示需要被装饰的函数,函数O表示最后被实际调用的函数

  • 第一种装饰器:@wraps
def actual_decorator(predict):
    def new_predict(
            inputs,
            output_ids,
            states,
            temperature=1,
            rtype='logits'
    ):
        prediction = predict(inputs, output_ids, states)
        print('temperature:', temperature)
        print('rtype:', rtype)
        return prediction
    return new_predict
 
@actual_decorator
def predict(inputs, output_ids, states):
    return inputs * output_ids + states

if __name__ == '__main__':
    print(predict(1, 2, 3, 10, 'xx'))  # 此时的参数是函数O的参数形式
  • 第二种装饰方式:@wraps()
    此处可以理解为,wraps()返回actual_decorator,所以,@wraps()等效于@actual_decorator。此处的实际装饰器是actual_decorator
def wraps(default_rtype='probas', random=None):
    def actual_decorator(predict):
        def new_predict(
                inputs,
                output_ids,
                states,
                temperature=1,
                rtype=default_rtype
        ):
            prediction = predict(inputs, output_ids, states)
            print('temperature', temperature)
            print('rtype', rtype)
            return prediction
        return new_predict
    return actual_decorator

@wraps(default_rtype='logits')
def predict(inputs, output_ids, states):
    return inputs * output_ids + states
    
if __name__ == '__main__':
    print(predict(1, 2, 3, 10, 'xx'))
#temperature: 10
#rtype: xx
#5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值