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

У меня есть этот булев, который я вычисляю. Сеансы - это список, и если он имеет 0 элементов, сеансы [0] вызовут исключение. К счастью, я думаю, что я могу поймать его до того, как его оценили, проверив len (сеансы)> 0.Оценка сложного условного python

Это работает на моей локальной машине разработки, но разве это нормально, или я должен вложить эти условные обозначения?

+0

Что такое условный питон? –

ответ

5

В Python, оператор and является defined to use short-circuit evaluation. Так что если у вас есть выражение, как

a() and b() 

тогда первый a() будет называться. Только если это вернет True, будет вызываться b(). Если a() возвращает False, то b() не вызывается, поэтому вы можете делать что-то в b(), которое может упасть, если a() - False.

Это, безусловно, принятая практика и широко используется.

0

Преимущество вложения условий заключается в том, что в этом конкретном случае он может улучшить удобочитаемость (уменьшая длину строки).

Хотя, по моему мнению, оба решения одинаково хороши, это вопрос вкуса и стиля кода больше всего на свете (сомнения в различиях в производительности, если они есть, окажут большое влияние).

0

Чтобы скопировать код an older question, попробуйте это. Синтаксис более интуитивный, хотя различие произвольно.

sessions[0].pk == Session.objects.filter(user=request.user).first().pk) if len(sessions) else False 
Смежные вопросы