From 62bb7a640ae1ba7f39ba3750ec1163d8c6ac6e21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=80=9D=E5=B7=9D?= Date: Thu, 6 Jan 2022 12:29:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E8=B4=A2=E5=8A=A1=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E4=B8=BA=E7=A9=BA=E5=80=BC=E6=88=96=E5=88=86=E6=AF=8D?= =?UTF-8?q?=E4=B8=BA0=E7=9A=84=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Rating/scripts/Indicators.py | 70 ++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 23 deletions(-) diff --git a/Rating/scripts/Indicators.py b/Rating/scripts/Indicators.py index b4fb1f5..70869ba 100644 --- a/Rating/scripts/Indicators.py +++ b/Rating/scripts/Indicators.py @@ -1,3 +1,30 @@ +import functools + + +def params_check(params_index): + """ + 参数校验 + Parameters: + params_index: 参数顺序下标 + Returns: + 1.若参数中有None或除法计算分母为0 返回None + 2.通过检验 返回func + """ + def decorator(func): + @functools.wraps(func) + def internal(*args, **kwargs): + # 检查参数中有没有None + if None in args: + return None + # 检查分母是否为0 + if sum([args[index] for index in params_index]) == 0: + return None + return func(*args, **kwargs) + return internal + return decorator + + +@params_check([1, 2]) def roe(param1, param2, param3): """ ZH: 净资产收益率 @@ -9,14 +36,12 @@ def roe(param1, param2, param3): Returns: value - float 净资产收益率 """ - if param2 + param3 == 0: - return None - else: - value = param1 / (param2 + param3) * 2 * 100 - value = round(value, 2) - return value + value = param1 / (param2 + param3) * 2 * 100 + value = round(value, 2) + return value +@params_check([2, 3]) def roa(param1, param2, param3, param4): """ ZH: 总资产报酬率 @@ -29,14 +54,12 @@ def roa(param1, param2, param3, param4): Returns: value - float 总资产报酬率 """ - if param3 + param4 == 0: - return None - else: - value = (param1 + param2) / (param3 + param4) * 2 * 100 - value = round(value, 2) - return value + value = (param1 + param2) / (param3 + param4) * 2 * 100 + value = round(value, 2) + return value +@params_check([1, 2]) def tat(param1, param2, param3): """ ZH: 总资产周转率 @@ -48,14 +71,12 @@ def tat(param1, param2, param3): Returns: value - float 总资产周转率 """ - if param2 + param3 == 0: - return None - else: - value = param1 / (param2 + param3) * 2 * 100 - value = round(value) - return value + value = param1 / (param2 + param3) * 2 * 100 + value = round(value) + return value +@params_check([1]) def acrt(param1, param2): """ ZH: 应收账款周转速度 @@ -66,13 +87,11 @@ def acrt(param1, param2): Returns: value - float 应收账款周算速度 """ - if param2 == 0: - return None - else: - value = round(param1 / param2, 2) - return value + value = round(param1 / param2, 2) + return value +@params_check([1, 2]) def ivtt(param1, param2, param3): """ ZH: 存货周转率 @@ -92,6 +111,7 @@ def ivtt(param1, param2, param3): return value +@params_check([1]) def dbar(param1, param2): """ ZH: 资产负债率 @@ -134,6 +154,7 @@ def icm(param1, param2, param3, param4, param5): return None +@params_check([2]) def qkr(param1, param2, param3): """ ZH: 速动比率 @@ -154,6 +175,7 @@ def qkr(param1, param2, param3): return value +@params_check([1]) def bgr(param1, param2): """ ZH: 营业增长率 @@ -173,6 +195,7 @@ def bgr(param1, param2): return value +@params_check([1]) def tagr(param1, param2): """ ZH: 总资产增长率 @@ -192,6 +215,7 @@ def tagr(param1, param2): return value +@params_check([1]) def tio(param1, param2): """ ZH: 技术投入比率