Search code examples
pythonpointerscoding-stylerefactoring

How to improve code and reduce number of code?


That code is exactly the same, so I want to refactor it in a simple way to reduce the number of lines. One thing which is different is min/max function execution. Is it available pointer to function in python to call min/max as a pointer to function like in 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")

Solution

  • An option to reduce duplication would be

    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")
    

    Depending on the func parameter, you can pass along the min or max function and get the wanted result. Here is an example on how to pass on functions as arguments : How do I pass a method as a parameter in Python