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: 净资产收益率 EN: Return Of Equity Parameters: param1 - float 净利润 param2 - float 所有者权益合计(当期) param3 - float 所有者权益合计(上期) Returns: value - float 净资产收益率 """ value = param1 / (param2 + param3) * 2 * 100 value = round(value, 2) return value @params_check([2, 3]) def roa(param1, param2, param3, param4): """ ZH: 总资产报酬率 EN: Return Of Assets Parameters: param1 - float 利润总额 param2 - float 利息支出 param3 - float 资产总计(当期) param4 - float 资产总计(上期) Returns: value - float 总资产报酬率 """ value = (param1 + param2) / (param3 + param4) * 2 * 100 value = round(value, 2) return value @params_check([1, 2]) def tat(param1, param2, param3): """ ZH: 总资产周转率 EN: Total Assets Turnover Parameters: param1 - float 营业收入 param2 - float 资产总计(当期) param3 - float 资产总计(上期) Returns: value - float 总资产周转率 """ value = param1 / (param2 + param3) * 2 * 100 value = round(value) return value @params_check([1]) def acrt(param1, param2): """ ZH: 应收账款周转速度 EN: Accounts Receivable Turnover Speed Parameters: param1 - float 营业收入 param2 - float 应收账款 Returns: value - float 应收账款周算速度 """ value = round(param1 / param2, 2) return value @params_check([1, 2]) def ivtt(param1, param2, param3): """ ZH: 存货周转率 EN: Inventory Turnover Parameters: param1 - float 营业成本 param2 - float 存货(当期) param3 - float 存货(上期) Returns: value - 存货周转率 """ if param2 + param3 == 0: return None else: value = param1 / (param2 + param3) * 2 value = round(value, 2) return value @params_check([1]) def dbar(param1, param2): """ ZH: 资产负债率 EN: Debt Asset Ratio Parameters: param1 - float 负债合计 param2 - float 资产总计 Returns: value - float 资产负债率 """ if param2 == 0: return None else: value = round(param1 / param2 * 100, 2) return value def icm(param1, param2, param3, param4, param5): """ ZH: 利息保障倍数 EN: Interest Cover Multiplier Parameters: param1 - float 利润总额 param2 - float 计入财务费用的利息支出 param3 - float 资本化利息支出 param4 - float 短期借款 param5 - float 长期借款 Returns: value - float 利息保障倍数 """ if (param2 + param3) == 0 and (param4 + param5) != 0: value = param1 / (param4 * 0.043 + param5 * 0.049) value = round(value, 2) return value elif (param2 + param3) > 0: value = (param1 + param2) / (param2 + param3) value = round(value, 2) return value else: return None @params_check([2]) def qkr(param1, param2, param3): """ ZH: 速动比率 EN: Quick Ratio Unit: % Parameters: param1 - float 流动资产合计 param2 - float 存货 param3 - float 流动负债合计 Returns: value - float 速动比率 """ if param3 == 0: return None else: value = (param1 - param2) / param3 value = round(value, 2) return value @params_check([1]) def bgr(param1, param2): """ ZH: 营业增长率 EN: Business Growth Rate Unit: % Parameters: param1 - float 期末营业收入 param2 - float 期初营业收入 Returns: value - float 营业增长率 """ if param2 == 0: return None else: value = (param1 - param2) / param2 * 100 value = round(value, 2) return value @params_check([1]) def tagr(param1, param2): """ ZH: 总资产增长率 EN: Total Assets Growth Rate Unit: % Parameters: param2 - float 期末资产总计 param3 - float 期初资产总计 Returns: value - float 总资产增长率 """ if param2 == 0: return None else: value = (param1 - param2) / param2 * 100 value = round(value, 2) return value @params_check([1]) def tio(param1, param2): """ ZH: 技术投入比率 EN: Technology Input-Output Ratio Unit: % Parameters: param1 - float 研发费用 param2 - float 营业收入 Returns: value - type 技术投入比率 """ if param2 == 0: return None else: value = round(param1 / param2 * 100, 2) return value