Python에서는 예상대로 부울 논리를 수행하지만 부울 값을 반환하지 않고 실제로 비교하는 값 중 하나를 반환합니다.
1.
>>> 'a' and 'b' 'b' >>> '' and 'b' '' >>> 'a' and 'b' and 'c' 'c'
부울 컨텍스트의 모든 값이 true인 경우 표현식의 값을 왼쪽에서 오른쪽으로 평가합니다. 마지막 값.
부울 컨텍스트의 값이 false인 경우 및 첫 번째 거짓 값을 반환합니다
2. or:
>>> 'a' or 'b' 'a' >>> '' or 'b' 'b' >>> '' or [] or {} {} >>> 0 or 'a' or 'c' 'a'
부울 값에서 or를 사용하는 경우 는 and와 마찬가지로 맥락에서 왼쪽에서 오른쪽으로 평가됩니다. 값이 true이거나 해당 값을 즉시 반환하는 경우
모든 값이 false이거나 마지막 false 값을 반환하는 경우
또는은 항상 부울 컨텍스트에서 표현식 평가를 수행합니다. 첫 번째 참 값이 발견되면 나머지 비교 값은 무시됩니다.
3. and-or:
and-or 앞의 두 구문을 결합하여 추론할 수 있습니다.
>>> a='first' >>> b='second' >>> 1 and a or b 'first' >>> (1 and a) or b 'first' >>> 0 and a or b 'second' >>> (0 and a) or b 'second' >>>
이 구문은 C 언어의 bool ? a : b 표현식과 유사합니다. 전체 표현식은 왼쪽에서 오른쪽으로 평가되므로 and 표현식이 먼저 평가됩니다. 1과 'first'는 'first'로 평가되고, 'first' 또는 'second'는 'first'로 평가됩니다.
0과 'first'는 False로 평가되고, 0 또는 'second'는 'second'로 평가됩니다.
and-or는 주로 삼항 연산자 bool?a:b를 모방하는 데 사용됩니다. 즉, bool 표현식이 참이면 a를 취하고 그렇지 않으면 b를 취합니다.
and-or 트릭, bool 및 a 또는 b 표현식은 a가 부울 컨텍스트에서 false로 평가될 때 C 언어 표현식 bool ?
4. and-or의 안전한 사용
>>> a="" >>> b="second" >>> (1 and [a] or [b]) [''] >>> (1 and [a] or [b])[0] '' >>>
[a]는 비어 있지 않은 목록이므로 결코 false가 아닙니다. a가 0, '' 또는 기타 거짓 값이더라도 목록 [a]에는 요소가 하나 있으므로 참입니다.
책임 있는 프로그래머는 and-or 기술을 함수로 캡슐화해야 합니다.
def choose(bool,a,b): return (bool and [a] or [b])[0] print choose(1,'','second') #''