Tuple構造をテストしていますが、次のような==
演算子を使用すると奇妙なことに気付きます。
>>> (1,) == 1,
Out: (False,)
これら2つの式を変数に割り当てると、結果はtrueになります。
>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
この質問は、私の意見では Python Tupleの末尾のコンマ構文規則 とは異なります。 ==
演算子の間の式のグループを尋ねます。
他の回答では、 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())
)])
これは単なる演算子の優先順位です。初の
(1,) == 1,
そのようなグループ:
((1,) == 1),
そのため、単一要素のタプル1,
から整数1
は平等であるため、等しくないため、1タプルFalse,
結果。
するとき
>>> (1,) == 1,
Tuple(1,)
をintegerと比較し、False
を返した結果でタプルを構築します。
代わりに、変数に割り当てると、2つの等しいタプルが互いに比較されます。
あなたが試すことができます:
>>> x = 1,
>>> x
(1,)