5 <(5 또는 10)이 5<(10 또는 5)와 어떻게 다른지 이해할 수 없습니다.

5 <(5 또는 10)이 5<(10 또는 5)와 어떻게 다른지 이해할 수 없습니다.

어제 이 질문을 봤습니다. Print( 5 <( 5 or 10)) <- 출력은 False입니다. Print( 5 <( 10 or 5)) <- 출력은 True입니다. 이해할 수 없습니다. Python이 읽는 방식과 마찬가지로 어떤 경우에는 False이고 다른 경우에는 True인 이유는 무엇입니까?

내 생각에는 언뜻 보이는 것만큼 분포되어 있지 않다는 것입니다. 5 <( 5 또는 10 ) != 5 < 5 또는 5 < 10.

파이썬이 이 함수를 어떻게 읽는지, 그 의미가 무엇인지 알고 싶습니다. 여기에 이미지 설명을 입력하세요.

여기에 이미지 설명을 입력하세요.

답변1

코드 줄(또는 줄 그룹)을 보고 해당 코드가 수행하는 작업을 이해하려는 경우 좋은 전략은 줄을 구성 요소 부분으로 나누는 것입니다. 이 줄이 왜 다른 결과를 반환하는지 궁금합니다.

>>> print( 5 < ( 5 or 10 ) )
False
>>> print( 5 < ( 10 or 5 ) )
True

그러니 분해해 봅시다. 이 코드 줄 사이의 유일한 차이점은 괄호 표현식 ( 5 or 10 )( 10 or 5 )이므로 Python이 이를 어떻게 처리하는지 살펴보겠습니다.

>>> ( 5 or 10 )
5
>>> ( 10 or 5 )
10

print()이 시점에서 두 명령문의 출력이 다른 이유가 명확해져야 합니다 . 즉, 실제로는 각각 print( 5 < 5 )print( 5 < 10 )- 입니다 .FalseTrue

그런데 왜 to 와 to 를 ( 5 or 10 )평가할까요 ? 이를 위해 실제 상황을 상담했습니다.5( 10 or 5 )10파이썬 문서, 부울 연산자의 관련 섹션에서 찾을 수 있습니다 or.

표현식이 먼저 평가 x or y됩니다 x.xTrue그 값이 반환됩니다; 그렇지 않으면 y를 계산하고 결과 값을 반환합니다.

Python에서 "진실"이 어떻게 작동하는지 이해한다면 이는 의미가 있습니다. 숫자 값의 경우 0sum 0.0은 false(즉, 부울 연산에서 로 평가되는 값 False)이고 다른 모든 값은 true(즉, 로 평가됨 True)입니다. 5나 10은 모두 false가 아니므로 각 괄호에서 첫 번째 값이 반환됩니다. 해당 값 자체는 True여전히 부울 테스트에서 평가되기 때문입니다.

>>> x = 5
>>> if x:
...   print( f'{x} is truthy enough for me!' )
...
5 is truthy enough for me!

잠재적인 사용 사례에서는 orSQL과 유사한 방식으로 작업 할 수 있습니다 COALESCE()(즉, false가 아닌 첫 번째 값 반환). 각 변수가 있는 변수 세트가 있어야 합니다.할 수 있다이는 프로그램에 적합하고 우선순위를 지정하려는 값을 실제 값으로 설정하는 (x or y or z)깔끔한 방법입니다 .

관련 정보