Pythonic 方式将 > 替换为 < in the midst of a big for loop

问题描述 投票:0回答:1

我正在尝试编写一个大的 for 循环来执行一些嵌套逻辑。我想控制在我的函数中使用 kwarg 应用哪些比较。基本上,我有两个不同的比较,两者都由我的函数中的 kwargs 控制。目前,为了确保可以是最小化或最大化,我必须多次复制/粘贴我的 for 循环。这感觉很笨拙。

def calc_best_points(observations, min_cost=False, min_value=False):
  for point in observations:
    blah blah blah
      if cost > best_cost:
        if value > best_value:
          other logic here
          res.append(point)
          best_cost, best_value = cost, value

基本上,我想写一些类似的东西:

if min_cost: comparison_to_apply = <

然后再往下:

if cost comparison_to_apply best_cost:

有没有办法做到这一点,或者我只需要根据我可能想做的各种比较组合复制/粘贴我的 for 循环四次?

python function control-flow
1个回答
0
投票

您可以使用

operator
模块将运算符函数放入变量中。

import operator

def calc_best_points(observations, min_cost=False, min_value=False):
    cost_compare = operator.lt if min_cost else operator.gt
    value_compare = operator.lt if min_value else operator.gt

    for point in observations:
        # blah blah blah
        if cost_compare(cost, best_cost):
            if value_compare(value, best_value):
                other logic here
                res.append(point)
                best_cost, best_value = cost, value
© www.soinside.com 2019 - 2024. All rights reserved.