Python 및/또는 반환 값에 대한 심층 분석

大家讲道理
풀어 주다: 2016-11-07 11:11:54
원래의
1220명이 탐색했습니다.

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')    #''
로그인 후 복사
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿