2011-02-01 19 views
2
show_prev_btn = (len(sessions) > 0 and (sessions[0].pk == \ 
    Session.objects.filter(user=request.user).first().pk)) 

私は計算しているこのブール値を持っています。 Sessionsはリストであり、要素数が0の場合、sessions [0]は例外を送出します。幸い、私は0複雑な条件付きのpythonを評価する

>それはLEN(セッション)を確認することで評価される前、私はそれをキャッチすることができると思いますこれは私の地元の開発マシン上で動作しますが、この大丈夫実施またはI巣がこれらの条件文べきでしょうか?

+0

条件付きのPythonとは何ですか? –

答えて

5

andオペレータはdefined to use short-circuit evaluationあります。あなたは

a() and b() 

のような表現を持っているのであれば、最初のa()が呼び出されます。それがTrueを返す場合にのみ、b()が呼び出されます。 a()Falseを返す場合は、b()は呼び出されません。で行うことができます。a()Falseの場合にクラッシュする可能性があります。

これは確かに受け入れられており、広く使用されています。

0

条件を入れ子にすることの利点は、この特定のケースでは、(行の長さを減らすことによって)少し読みやすくすることができるということです。

私の意見ではどちらも同じように良い解決策ですが、それは何よりも味とコードスタイルの問題です(パフォーマンスの差があれば、それは大きな影響を及ぼすでしょう)。

0

an older questionからコピーするには、これを試してください。違いは任意ですが、シンタックスはより直感的です。 Pythonで

sessions[0].pk == Session.objects.filter(user=request.user).first().pk) if len(sessions) else False 
関連する問題