show_prev_btn = (len(sessions) > 0 and (sessions[0].pk == \
Session.objects.filter(user=request.user).first().pk))
我有这个布尔值,我正在计算。 Sessions是一个列表,如果它有0个元素,则sessions [0]将引发异常。幸运的是,我认为在通过检查len(会话)>进行评估之前我可以抓住它。 0
这可以在我的本地开发机器上运行,但这是可行的做法还是应该嵌套这些条件?
答案 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