有没有办法在一行中写这个if..else语句?

时间:2016-11-14 08:40:08

标签: python django

我是python和django的新手,现在我正在学习如何在一行中编写if ..else语句来简化代码。

但在这种情况下,我有两个查询集,稍有变化。 我想知道是否可以在一行中简化此代码

 if self.booked:
     x = qs.filter(content_id=content_id, object_id=model.id, action=10)
 else:
     x = qs.filter(content_id=content_id, object_id=model.id).exclude(action=10)
 return x

3 个答案:

答案 0 :(得分:0)

这是可能的,但结果难以阅读:

return qs.filter(content_id=content_id, object_id=model.id, action=10) if self.booked else qs.filter(content_id=content_type_id, object_id=model.id).exclude(action=10)

答案 1 :(得分:0)

if self.booked条件看起来非常重要,让您在代码中脱颖而出符合您的利益。

但是如果你想简化,你可以提取查询集的公共部分:

qs = qs.filter(object_id=model.id)
if self.booked:
    qs = qs.filter(content_id=content_id, action=10)
else:
    qs = qs.filter(content_id=content_type_id).exclude(action=10)
return qs

答案 2 :(得分:0)

我会改写它,所以常见的部分不在if:

qs = qs.filter(content_id=content_id, object_id=model.id)
return qs.filter(action=10) if self.booked else qs.exclude(action=10)

虽然它看起来很神秘,特别是因为动作10是硬编码的。你应该为它定义一个具有明确名称的常量,至少。

编辑:哇,这实际上是错误的,因为如果你在content_id上过滤,而另一边在content_type_id上​​过滤。那是我的虫子还是你的?至少它证明你的代码难以阅读......