IT story

파이썬에서“(1,) == 1”의 의미는 무엇입니까?

hot-time 2020. 7. 17. 08:00
반응형

파이썬에서“(1,) == 1”의 의미는 무엇입니까?


튜플 구조를 테스트하고 있는데 ==연산자를 사용할 때 이상하다는 것을 알았습니다 .

>>>  (1,) == 1,
Out: (False,)

이 두 표현식을 변수에 할당하면 결과는 true입니다.

>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True

이 질문은 내 관점 에서 파이썬 튜플 후행 쉼표 구문 규칙다릅니다 . ==연산자 사이에 표현 그룹을 요청합니다 .


다른 답변은 이미 설명 된대로 동작, 연산자 우선 순위에 의한 있음을 보여 주었다 여기 .

다음에 이와 비슷한 질문이있을 때 스스로 답을 찾는 방법을 보여 드리겠습니다. ast모듈을 사용하여 표현식이 구문 분석되는 방식을 해체 할 수 있습니다 .

>>> import ast
>>> source_code = '(1,) == 1,'
>>> print(ast.dump(ast.parse(source_code), annotate_fields=False))
Module([Expr(Tuple([Compare(Tuple([Num(1)], Load()), [Eq()], [Num(1)])], Load()))])

이것으로부터 Tim Peters가 설명한 것처럼 코드가 파싱 되는 것을 볼 수 있습니다 .

Module([Expr(
    Tuple([
        Compare(
            Tuple([Num(1)], Load()), 
            [Eq()], 
            [Num(1)]
        )
    ], Load())
)])

이것은 운영자 우선 순위입니다. 너의 첫번째

(1,) == 1,

같은 그룹 :

((1,) == 1),

따라서 단일 요소 튜플 1,을 정수와 정수 의 비교 결과에서 단일 요소로 튜플을 빌드합니다. 1같지 않으므로 False,결과에 대한 1 튜플 얻습니다 .


당신이 할 때

>>> (1,) == 1,

튜플 (1,)정수비교하여 결과를 반환 하여 튜플을 빌드합니다 False.

대신 변수에 할당 할 때 두 개의 동일한 튜플 이 서로 비교됩니다.

당신은 시도 할 수 있습니다:

>>> x = 1,
>>> x
(1,)

참고 URL : https://stackoverflow.com/questions/37313471/whats-the-meaning-of-1-1-in-python

반응형