如何改善代码并减少代码数量?

时间:2018-06-29 09:01:35

标签: python pointers coding-style refactoring

该代码完全相同,因此我想以一种简单的方式来重构它以减少行数。不同之处是最小/最大函数执行。 可以使用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")

2 个答案:

答案 0 :(得分:8)

减少重复的选项是

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

答案 1 :(得分:1)

好吧,您只需制作一个函数并添加一个参数即可指定要调用的函数。例如:

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)