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

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

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

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

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

이 질문은 내 관점 에서 Python 튜플 후행 쉼표 구문 규칙 과 다릅니다 . 나는 ==연산자 사이의 표현 그룹을 묻습니다 .



답변

다른 답변은 여기에 설명 된대로 동작이 연산자 우선 순위 때문이라는 것을 이미 보여주었습니다 .

다음에 이와 비슷한 질문이있을 때 직접 답을 찾는 방법을 보여 드리겠습니다. 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,)


답변