1. ホーム
  2. python

[解決済み] Pythonの「(1,) == 1,」はどういう意味?

2022-09-06 12:57:22

質問

タプル構造をテストしているのですが、タプル構造に対して == のような演算子を使うと変なことになります。

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

この2つの式を変数に代入すると、結果はtrueになります。

>>> 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())
)])