关于一个编程问题,请教各位大佬

问题

请教大佬们,这问题怎么实现

完成Python 的装饰器 提交参数检查器,

若是整形 数字在0-10之间,

若是字符串 长度在8-16之间

若是数组list 则要求类型都是字符串

其他类型默认参数不能为空。

如果校验不通过,则抛异常,通过则继续执行

我只写了个架子,实现有点不知怎么弄
image

  • 你是要限制一个参数 还是全部参数?
  • checkout方法中的args 和 kwargs就相当于是方法的全部入参了,处理的时候只需要对这两个数据里面的内容进行遍历处理就行了
  • 要注意一个情况,如果是类方法、实例方法,args的第一个参数会是类/实例本身,这个参数需要跳过判断
  • 其他的逻辑写在func前面就行了,因为func()这一行就是实际原方法的运行

对传入的所有类型的参数都校验,
整形、 字符串、 数组list、 其他类型默认参数
内涵数中的实现逻辑有点搞不明白,

我不知道,如何对(*args,**kwargs)这种参数做类型校验,
粗略思路:
if type(*args, **kwargs) == int:
if xxxxx < 0 or xxxxxx > 10:
print(‘请输入:整形数字,在0-10之间’)
elif type(*args, **kwargs) == string:
if xxxxx.length < 8 or xxxxx.length > 16:
print(“请输入:字符串,长度在8-16之间”)
elif type(*args, **kwargs) == list:
if type(list[’’]) != string:
print(“请输入:数组, 要求类型都是字符串”)
else:
print(“参数不能为空”)

大佬能写一个我参考一下么

有大佬 可以给一个范例参考么……

“其他类型默认参数不能为空”,有点矛盾,既然传了怎么为空,空列表吗?

def arg_check(arg):
    if isinstance(arg, int):
        if not 0 <= arg <= 10:
            raise '整形参数要求范围为0-10'

    elif isinstance(arg, str):
        if not 8 <= len(arg) <= 16:
            raise '字符串参数 要求长度范围为8-16'

    elif isinstance(arg, list):
        for i in arg:
            if not isinstance(i, str):
                raise '数组参数 要求类型都是字符串'
    else:
        pass


def inspector(func):
    # 创建inner内置函数,用来接收传入函数的入参
    def inner(*args, **kwargs):
        # 查看参数内容
        print('inner args:', args)
        print('inner kwargs:', kwargs)

        # 添加参数校验逻辑
        for arg in args:
            arg_check(arg)
        for key in kwargs:
            arg_check(kwargs[key])

        # 重新组装传入函数
        return func(*args, **kwargs)

    # 返回函数并运行
    return inner


@inspector
# 不定参数函数
def my_func(*args, **kwargs):
    print('my_func:', args, '\n')


@inspector
# 定参函数
def my_func_key(a, b):
    print('my_func:', a, b, '\n')


my_func(1, 2, 'asda11111', ['11', '22'])
my_func_key(3, 4)
my_func_key(a=5, b='1341243124')
关闭