当前位置:   article > 正文

字符串变为函数_字符串 如何转函数

字符串 如何转函数

    今天看到一段代码,在一字典中有个字段为gt,gte,lt,lte,然后根据此字段进行判断,例子代码如下:

  1. dict_test1 = {"A":2,"B": 3, "rule":"gt"}
  2. dict_test2 = {"A":2,"B": 3, "rule":"gte"}
  3. dict_test3 = {"A":2,"B": 3, "rule":"lt"}
  4. # 需要对最后的rule进行判断,然后判断前面A,B谁更大,然后进行其他流程操作
  5. if dict_test1['rule'] == "gt":
  6. if A > B :
  7. control(1)
  8. else:
  9. control(2)
  10. elif dict_test1['rule'] == "gte":
  11. if A >= B :
  12. control(1)
  13. else:
  14. control(2)
  15. elif dict_test1['rule'] == "lte":
  16. if A <= B :
  17. control(1)
  18. else:
  19. control(1)
  20. elif dict_test1['rule'] == "lt":
  21. if A < B :
  22. control(1)
  23. else:
  24. control(2)

看到这样的代码,感觉太麻烦了,特别是如果第二层判断后,如果代码重复,那完全就是消耗性能,以及冗余的代码。

优化后:

  1. from operator import lt, gt, ge, le
  2. dict_test1 = {"A":2,"B": 3, "rule":"gt"}
  3. dict_test2 = {"A":2,"B": 3, "rule":"ge"}
  4. dict_test3 = {"A":2,"B": 3, "rule":"lt"}
  5. dict_test4 = {"A":2,"B": 3, "rule":"le"}
  6. if locals()[dict_test1["rule"]](A,B):
  7. print("A", dict_test1["rule"], "B")
  8. pass
  9. else:
  10. pass

主要优化:1 将rule中的gte,lte需要改为le(小于等于),ge(大于等于)
                   2 多个步骤优化成一个,自动进行判断。无需其他
注意点:

  1. 需要提前将相关函数import进来
  2. 转化方式:locals()[func](**arg)
  3. 通过globals 也是可以的,看个人需求,方式和locals一样


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/78692
推荐阅读
相关标签
  

闽ICP备14008679号