ProgramingTip

'None is None is None'이 True를 반환하는 이유는 무엇입니까?

bestdevel 2020. 12. 30. 23:52
반응형

'None is None is None'이 True를 반환하는 이유는 무엇입니까?


오늘 인터뷰에서 CTO는 어떤 것이 쉬운 질문인지 물었습니다.

이 관련된 것은 무엇을 반환합니까? :

None is None is None

문자는 첫 번째 작업을 실행 생각 None is None하고 반환합니다 True. 후 그 True is None어느 것이 False. 하지만 놀랍게도 정답은 True입니다. 이 질문에 대한 답을 보내 고고하는데 이틀 동안 검색 한 결과 아무것도 찾지 않습니다. 어떤 누군가가 이런 일이 발생하는지 설명 할 수 있습니까?


바이트 코드는 두 가지 비교가 여기에서 수행되고 중간이 복제 보여줍니다.

>>> import dis
>>> def a():
...     return None is None is None
... 
>>> dis.dis(a)
  2           0 LOAD_CONST               0 (None)
              3 LOAD_CONST               0 (None)
              6 DUP_TOP
              7 ROT_THREE
              8 COMPARE_OP               8 (is)
             11 JUMP_IF_FALSE_OR_POP    21
             14 LOAD_CONST               0 (None)
             17 COMPARE_OP               8 (is)
             20 RETURN_VALUE
        >>   21 ROT_TWO
             22 POP_TOP
             23 RETURN_VALUE

비교 를 위해 문서 에서 언급했듯이 당시의 연산자가 함께 연결되기 때문입니다.

a op b op c로 번역 할 것이다 a op b and b op c(참고는 b위의 그림과 같이 바이트 코드에)


일부 사람들이 언급했듯이 Python 비교는 연결될 수 있습니다 .

설명을 위해 연결시 Python은 실제로 활용을 AND 합니다.

T 그는이 뒤에 이론적 근거는 , 표현이 파운더 그입니다 a < b < c수학 종래 해석이있다. 따라서 특정 표현의 혼란 스러운 존재가 참여하고 있습니다.None is None is None

따라서 기본적으로 다음과 같이 번역됩니다.

(None is None) and (None is None)

그것은 분명히 True

다음은 Python 문서의 또 다른 예입니다.

추가 정보

특히 이것은 인터뷰 질문이기 때문에 모든 언어가 공통적으로 공유하는 행동이 아니라는 점에 유의하는 것이 중요합니다.

내가 링크 한 문서에 있고 같이,

C와 달리 Python의 모든 연산은 연산은 동일한 우선 순위를 모든 연산, 이는 산술, 시프트 또는 비트 연산의 우선 순위보다 낮습니다.

따라서 10 > x > 2표현식을 고려해 봅시다 ( is연산자는 C 유효하지 않기에서 때문 입니다).

C의 번역 ( 연산자 우선 순위 때문에 )

((10 > x) > 2)

언어의 번역

(10 > x) and (x > 2)

is문서에서 볼 수 비교 연산자입니다 .

comparison    ::=  or_expr ( comp_operator or_expr )*
comp_operator ::=  "<" | ">" | "==" | ">=" | "<=" | "!="
                   | "is" ["not"] | ["not"] "in"

따라서 다른 비교 연산자와 비교할 수 있습니다. 그래서

a = b = c = None
a is b is c

다음과 같다

(a is b) and (b is c)

참조 URL : https://stackoverflow.com/questions/50951076/why-does-none-is-none-is-none-return-true

반응형