web-dev-qa-db-ja.com

Pythonの「(1、)== 1、」の意味は何ですか?

Tuple構造をテストしていますが、次のような==演算子を使用すると奇妙なことに気付きます。

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

これら2つの式を変数に割り当てると、結果はtrueになります。

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

この質問は、私の意見では Python Tupleの末尾のコンマ構文規則 とは異なります。 ==演算子の間の式のグループを尋ねます。

118
Pythoner

他の回答では、 here に記載されているように、動作は演算子の優先順位によるものであることをすでに示しています。

次回、これに似た質問がある場合は、自分で答えを見つける方法を紹介します。 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())
)])
88
wim

これは単なる演算子の優先順位です。初の

(1,) == 1,

そのようなグループ:

((1,) == 1),

そのため、単一要素のタプル1,から整数1は平等であるため、等しくないため、1タプルFalse,結果。

150
Tim Peters

するとき

>>> (1,) == 1,

Tuple(1,)integerと比較し、Falseを返した結果でタプルを構築します。

代わりに、変数に割り当てると、2つの等しいタプルが互いに比較されます。

あなたが試すことができます:

>>> x = 1,
>>> x
(1,)
12
mng