该代码完全相同,因此我想以一种简单的方式来重构它以减少行数。不同之处是最小/最大函数执行。 可以使用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")
答案 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参数,您可以传递min
或max
函数,以获得所需的结果。这是一个有关如何将函数作为参数传递的示例: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)