show_prev_btn = (len(sessions) > 0 and (sessions[0].pk == \
Session.objects.filter(user=request.user).first().pk))
我有這個布爾值,我正在計算。會話是一個列表,如果它有0個元素,會話[0]將引發異常。幸運的是,我認爲我可以通過檢查len(會話)> 0來評估它。評估一個複雜的條件python
這適用於我的本地開發機器,但是這是否可行或我應該嵌套這些條件?
show_prev_btn = (len(sessions) > 0 and (sessions[0].pk == \
Session.objects.filter(user=request.user).first().pk))
我有這個布爾值,我正在計算。會話是一個列表,如果它有0個元素,會話[0]將引發異常。幸運的是,我認爲我可以通過檢查len(會話)> 0來評估它。評估一個複雜的條件python
這適用於我的本地開發機器,但是這是否可行或我應該嵌套這些條件?
在Python中,and
運營商defined to use short-circuit evaluation。所以如果你有像
a() and b()
然後第一個a()
將被調用。只有在返回True
時,纔會調用b()
。如果a()
返回False
,則不會調用b()
,因此如果a()
爲False
,您可以在b()
中執行可能會崩潰的操作。
這是當然可以接受的做法並被廣泛使用。
嵌套條件的優點是,在這種特定情況下,它可能會提高可讀性(通過減少行長度)。
雖然在我看來,兩者同樣都是不錯的解決方案是品味和代碼風格比什麼都重要(懷疑的性能差異,如果有的話,將有很大的影響)的問題。
要從an older question複製,請試試這個。語法更直觀,但區別是任意的。
sessions[0].pk == Session.objects.filter(user=request.user).first().pk) if len(sessions) else False
什麼是條件python? – 2011-02-01 02:04:53