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

2024-06-16 12:32:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

在我看来,这些问题与Python tuple trailing comma syntax rule不同。我问==运算符之间的表达式组。


Tags: falsetrue表达式运算符outrule结构元组
3条回答

当你这样做的时候

>>> (1,) == 1,

它通过比较元组(1,)整数的结果来构建元组,从而返回False

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

您可以尝试:

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

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

(1,) == 1,

像这样的团体:

((1,) == 1),

因此,从比较一个元素元组1,与整数1的结果中生成一个具有单个元素的元组,因为它们不相等,所以得到一个结果的1元组False,

其他的答案已经向您表明,该行为是由运算符优先级决定的,如here所述。

下次你有类似的问题时,我会教你如何自己找到答案。可以使用^{}模块解构表达式的解析方式:

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

相关问题 更多 >