"(1,)== 1,"的含义是什么?在Python?

时间:2016-05-19 03:29:26

标签: python tuples equals-operator

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

ElephantCare

当我将这两个表达式分配给变量时,结果为true:

==

在我看来,这个问题与Python tuple trailing comma syntax rule不同。我问>>> (1,) == 1, Out: (False,) 运算符之间的表达式组。

3 个答案:

答案 0 :(得分:150)

这只是运营商优先级。你的第一个

(1,) == 1,
像这样的小组:

((1,) == 1),

所以使用单个元素构建一个元组,将单元素元组1,与整数1进行比较以获得相等性它们不相等,所以得到1元组{ {1}}结果。

答案 1 :(得分:87)

其他答案已经向您显示行为是由运营商优先级引起的,如文档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()))])

从中我们可以看到代码被解析as Tim Peters explained

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

答案 2 :(得分:12)

当你这样做时

>>> (1,) == 1,

它通过比较元组 (1,)整数并因此返回False来构建一个元组。

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

您可以尝试:

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