python中有参数的装饰器

在装饰器的使用过程中我们可以实现对装饰器传递参数的功能,以下面的例子来看带参的装饰器如何使用~~~~:

1.无参数的装饰器(低配)

需求: 1. 编写装饰器required_ints, 条件如下:
1). 确保函数接收到的每一个参数都是整数;
2). 如果参数不是整形数, 打印 :参数必须为整形
import functools

def  require_int(f):
    @functools.wraps(f)
    def wrapper(*args,**kwargs):
        print(args )
        for i in args :
            print(i)
            if not isinstance(i,int):
                print("TypeError!请输入整型参数~~~~")
                return
        else:
                res=f(*args,**kwargs)
                return res
    return wrapper
@require_int
def fun(a,b):
    print('%d,%d的和为:%d'%(a,b,a+b))
fun(1,1.2)
运行结果:
(1, 1.2)
1
1.2
TypeError!请输入整型参数~~~~

2.带参数的装饰器(升级)

需求:编写装饰器required_types, 条件如下:
1). 当装饰器为@required_types(int,float)确保函数接收到的每一个参数都是int或者float类型;
2). 当装饰器为@required_types(list)确保函数接收到的每一个参数都是list类型;
3). 当装饰器为@required_types(str,int)确保函数接收到的每一个参数都是str或者int类型;
4). 如果参数不满足条件, 打印 TypeError:参数必须为xxxx类型

import functools
def require_type(*kind):
    def  require_int(f):
        @functools.wraps(f)
        def wrapper(*args,**kwargs):
            print(kind)
            print(args )
            for i in args :
                print(i)
                if not isinstance(i,kind):
                    print("TypeError!请输入类型参数~~~~",kind)
                    return
            else:
                res=f(*args,**kwargs)
                return res
        return wrapper
    return require_int
@require_type(int,str)
def fun(a,b):
    print('%d,%d的和为:%d'%(a,b,a+b))
fun(1,1)
运行结果:
(<class 'int'>, <class 'str'>)
(1, 1)
1
1
1,1的和为:2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值