【发布时间】:2018-02-03 16:29:40
【问题描述】:
我有很多条件要检查,但是条件评估很重(例如条件需要访问数据库),所以我必须懒惰地检查它们。
通常,这种检查可以写在if子句中:
if type in FOOD_PRIZES and Prize.objects.filter(type=type).exists():
pass
如果条件的数量在增加,那么if 子句就会变得丑陋。
我可以列出条件 lambdas 并使用all 方法,但它看起来也很丑:
conditions = [
lambda: type in FOOD_PRIZES,
lambda: Prize.objects.filter(type=type).exists()
]
if all(condition() for condition in conditions):
pass
有没有更好的方法来缩短代码?还有其他方法可以使条件变得惰性吗?
【问题讨论】:
-
你可以做
if a == b == c == d: -
这似乎不是 python 问题,因为您声明问题是由于查询时间造成的。在这种情况下,python 代码没有区别;这是一个微优化。
-
鉴于您的反对意见是您的解决方案“看起来很丑”,而您要求的解决方案“看起来更好”,这完全基于您的意见,您甚至希望如何回答?
-
@potykion 您的实际条件是什么样的?
-
为什么要短?