小菜鸟的python进阶之路 ------- 带参数的装饰器

昨天,我们简单了解了装饰器,那么你了解装饰器带参数是怎样的吗??

下面,我们用一个简单的例子来了解一下带参数的装饰器

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

"""
def required_types(*kinds):
    def required_ints(fun):
        def wrapper(*args,**kwargs):
            for i in list(args)+list(kwargs.values()):
                if not isinstance(i,kinds):
                    print("TypeError:参数必须是:",kinds)
                    return ''
            else:
                    res = fun(*args,**kwargs)
                    return res
        return wrapper
    return required_ints

@required_types(int)
def add(*args,**kwargs):
    #print(kwargs.values())
    return sum(list(args)+ list(kwargs.values()))


print(add(1,2,3,65,67,1,a=1,b=2))

执行结果如下:

当参数都符合要求时,执行结果为:

小菜鸟的python进阶之路 ------- 带参数的装饰器_第1张图片

当参数不符合要求时,执行结果会出错:

小菜鸟的python进阶之路 ------- 带参数的装饰器_第2张图片

小菜鸟的python进阶之路 ------- 带参数的装饰器_第3张图片

 

 

 

 

你可能感兴趣的:(小菜鸟的python进阶之路)