【问题标题】:How to improve code and reduce number of code?如何改进代码并减少代码数量?
【发布时间】:2018-12-08 10:21:08
【问题描述】:

那段代码完全一样,所以我想用一种简单的方式重构它以减少行数。不同的一件事是最小/最大函数执行。 是否可以在 python 中使用指向函数的指针来调用 min/max 作为指向函数的指针,就像在 C 中一样?

def calculate_min(a, b, c, d, e, f):
    try:
        v = a[e][f]
        b[d] = v if np.isnan(b[d]) else min(b[d], v)    #min()
    except KeyError as exc:
        logger.error("keyerror")

def calculate_max(a, b, c, d, e, f):
    try:
        v = a[e][f]
        b[d] = v if np.isnan(b[d]) else max(b[d], v)    #max()
    except KeyError as exc:
        logger.error("keyerror")

【问题讨论】:

  • 完全不相关,但您应该使用logger.exception() 而不是logger.error() => 这会将完整的错误消息和回溯添加到日志中,这对于调试非常有用.

标签: python pointers coding-style refactoring


【解决方案1】:

减少重复的选项是

def calculate_value(a, b, c, d, e, f, func=max):
    try:
        v = a[e][f]
        b[d] = v if np.isnan(b[d]) else func(b[d], v)    #min() or max()
    except KeyError as exc:
        logger.error("keyerror")

根据 func 参数,您可以传递 minmax 函数并获得想要的结果。这是一个关于如何将函数作为参数传递的示例:How do I pass a method as a parameter in Python

【讨论】:

    【解决方案2】:

    你可以只创建一个函数并添加一个参数来指定要调用的函数。例如:

    def calculate_func(a, b, c, d, e, f, func):
        try:
            v = a[e][f]
            b[d] = v if np.isnan(b[d]) else func(b[d], v)    #replaced min/max by func
        except KeyError as exc:
            logger.error("keyerror")
    
    calculate_min = lambda a, b, c, d, e, f: calculate_func(a, b, c, d, e, f, min)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多