Python 中的“(1,) == 1”是什么意思?

What's the meaning of "(1,) == 1," in Python?

我正在测试元组结构,当我使用 == 运算符时发现它很奇怪,例如:

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

当我将这两个表达式赋给一个变量时,结果为真:

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

我认为这个问题与Python tuple trailing comma syntax rule不同。我问==运算符之间的表达式组。

这只是运算符优先级。你的第一个

(1,) == 1,

像这样的群组:

((1,) == 1),

so 根据比较单元素元组 1, 与整数 1 的结果构建一个包含单个元素的元组是否相等 它们不相等,所以你得到 1-结果的元组 False,

当你

>>> (1,) == 1,

它用 tuple (1,)integer 比较的结果构建一个元组,从而返回 False.

相反,当您分配给变量时,两个 相等的元组 会相互比较。

你可以试试:

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

其他答案已经向您表明该行为是由于运算符优先级引起的,如记录 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()))])

从这里我们可以看到代码被解析了

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