Python 惰性多条件检查

Python lazy multiple conditions check

我有很多条件要检查,但是条件评估很重(例如条件需要访问数据库),所以我不得不懒惰地检查它们。

一般情况下,这样的检查可以写在if子句中:

if type in FOOD_PRIZES and Prize.objects.filter(type=type).exists():
    pass

如果条件的数量不断增加,那么 if 子句就变得丑陋了。

我可以制作条件 lambda 列表并使用 all 方法,但它看起来也很丑陋:

conditions = [
  lambda: type in FOOD_PRIZES,
  lambda: Prize.objects.filter(type=type).exists()
] 

if all(condition() for condition in conditions):
   pass

有没有更好的方法来缩短代码?还有其他方法可以使条件变得惰性吗?

你最好的选择是继续你正在做的事情——但是首先检查你最快的条件。

,这意味着一旦某个条件的计算结果为 False,它将停止处理条件,从而节省您 运行 其他查询所花费的时间。

至于什么 看起来 最好 — 由您决定。但是拥有有效、可读的代码比 "attractive" 代码要好得多!短代码并不总是更好。冗长通常会使代码对其他人更易读。

小心一点。例如,如果后续条件依赖于第一个条件,则使用 all 可能会中断。例如,给定 x='6.5'if isinstance(x, float) and x>5.5 会工作,但 all((isinstance(x, float), x>5.5)) 会出错。