Как улучшить код и уменьшить количество кода? - PullRequest
0 голосов
/ 29 июня 2018

Этот код точно такой же, так что я хочу просто реорганизовать его, чтобы уменьшить количество строк. Отличительной особенностью является выполнение функции min / max. Имеется ли указатель на функцию в 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 голосов
/ 29 июня 2018

Ну, вы можете просто сделать одну функцию и добавить аргумент, который определяет, какую функцию вызывать. Например:

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)
0 голосов
/ 29 июня 2018

Опция уменьшения дублирования будет

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, вы можете передать функцию min или max и получить желаемый результат. Вот пример передачи функций в качестве аргументов: Как передать метод в качестве параметра в Python

...