list有一个index(o)方法可以找到索引,这个是dist和list同时兼容一种迭代的关键
@classmethod
# 功能:models内部所以属性值为Decimal小数类型的都会自动转换成Float类型
# 原理:利用递归的思想来改变传入models的数据【切记:必须直接改变models而不是迭代的o对象】
# 说明:models内部必须是list或dict【由于元组无法改变,所以models不支持元组】
def models_decimal_to_float(cls, model):
# 如果不是一个Iterable可迭代对象【不支持for迭代的都不是一个可迭代对象】
if not isinstance(model, collections.Iterable):
return model
for o in model:
if isinstance(model, list):
if isinstance(o, Decimal):
model[model.index(o)] = float(model[model.index(o)])
# 【非常重要】递归改变models,所以这里不能传o,因为改变o是没办法改变models本身
cls.models_decimal_to_float(model[model.index(o)])
elif isinstance(model, dict):
if isinstance(model[o], Decimal):
model[o] = float(model[o])
# 【非常重要】递归改变models,所以这里不能传o,因为改变o是没办法改变models本身
cls.models_decimal_to_float(model[o])
else:
# 改方法仅兼容可迭代对象dict和list,其他Iterable对象不处理
pass
return model