问题
请教大佬们,这问题怎么实现
完成Python 的装饰器 提交参数检查器,
若是整形 数字在0-10之间,
若是字符串 长度在8-16之间
若是数组list 则要求类型都是字符串
其他类型默认参数不能为空。
如果校验不通过,则抛异常,通过则继续执行
我只写了个架子,实现有点不知怎么弄
请教大佬们,这问题怎么实现
我只写了个架子,实现有点不知怎么弄
对传入的所有类型的参数都校验,
整形、 字符串、 数组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')