评估复杂的条件python

时间:2011-02-01 01:50:45

标签: python conditional

show_prev_btn = (len(sessions) > 0 and (sessions[0].pk == \
    Session.objects.filter(user=request.user).first().pk))

我有这个布尔值,我正在计算。 Sessions是一个列表,如果它有0个元素,则sessions [0]将引发异常。幸运的是,我认为在通过检查len(会话)>进行评估之前我可以抓住它。 0

这可以在我的本地开发机器上运行,但这是可行的做法还是应该嵌套这些条件?

3 个答案:

答案 0 :(得分:5)

在Python中,and运算符为defined to use short-circuit evaluation。所以如果你有一个像

这样的表达式
a() and b()

然后将调用第一个a()。仅当返回True时,才会调用b()。如果a()返回False,则系统不会调用b(),因此如果b()a(),您可以在False内执行可能会崩溃的问题

这当然是公认的做法,并被广泛使用。

答案 1 :(得分:0)

嵌套条件的优点是,在这种特定情况下,它可以稍微提高可读性(通过减少行长度)。

虽然在我看来两者都是同样出色的解决方案,但它比品味和代码风格更重要(怀疑性能差异,如果有的话,会产生很大的影响)。

答案 2 :(得分:0)

要从an older question进行复制,请尝试此操作。语法更直观,但差异是任意的。

sessions[0].pk == Session.objects.filter(user=request.user).first().pk) if len(sessions) else False