trac 의 한 소스를 보다가 아래와 같은 문장을 보았다.


${ticket.exists and 'Submit changes' or 'Create ticket'}
ticket.exists 가 참이면 'Submit changes' 를 거짓이면 'Create ticket' 을 의미하게 되는 문장이다.
이 문장을 문법적으로 이해하려고 했는데 잘 이해가 되지 않았다.

python 에서 and 와 or 문은 True 나 False로 evaluation 되지 않는다.

x and y 는 첫번째로 x를 evaulation 하고 true 이면 x의 evaulation 값을 리턴하고, false이면 y의 evaluation 값을 리턴한다.

x or y 는 x를 evaluation 하고 true 이면 x의 evaulation 값을, false 이면 y이 evaulation 값을 리턴한다.

${ticket.exists and 'Submit changes' or 'Create ticket'} 문장을 보면 ticket.exists 가 참이면 'Submit changes' 를 evalutation 한다 이는 참임으로 'Submit changes' 스트링이 결과값이다. ticket.exists 가 False 이면 ticket.exists and 'Submit changes' 전체가 ticket.exists 로 계산되고  ticket.exists or 'Create ticket' 을 연산하게 된다.

나중에 python.kr 사이트에서 게시물 검색중 관련된 내용을 알았다.
C언어에서 a ? b : c 라는 표현을 python으로 옮길 때,
a and b or c 와 같이 표현하면 된다는 것을, 하지만 이때 b는 항상 true 로 판별되어야만 가능하다는 것을.....
AND