2011-02-01 4 views
2
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

anddefined to use short-circuit evaluation 연산자이다. 따라서

a() and b() 

과 같은 표현식을 사용하는 경우에는 a()이 먼저 호출됩니다. 그 값이 True 인 경우에만 b()이 호출됩니다. a()False을 반환하면 b()이 호출되지 않으므로 a()False 인 경우 충돌 할 수있는 b()에서 작업을 수행 할 수 있습니다.

이것은 확실히 받아 들여지는 관행이며 널리 사용됩니다.

0

조건을 중첩하는 장점은 특정 경우에 선 길이를 줄임으로써 약간의 가독성을 향상시킬 수 있다는 것입니다.

제 생각에는 둘 다 똑같이 좋은 솔루션입니다. 다른 어떤 것보다 맛과 코드 스타일의 문제입니다 (성능상의 차이가있을 경우에는 큰 영향을 줄 것입니다).

0

an older question에서 복사하려면 다음을 시도하십시오. 차이점은 임의적이지만 구문은보다 직관적입니다. 파이썬

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