在 Python 中“(1,) = = 1”的含义是什么?

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

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

当我把这两个表达式赋给一个变量时,结果是真的:

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

这个问题在我看来与 Python 元组后跟逗号语法规则不同,我问的是 ==运算符之间的一组表达式。

13822 次浏览

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

(1,) == 1,

这样的团体:

((1,) == 1),

因此,通过比较一元素元组 1,和整数 1的相等性,构建一个包含单个元素的元组,它们是不相等的,所以得到的结果是1元素元组 False,

等你找到的时候

>>> (1,) == 1,

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

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

You can try:

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

其他答案已经表明,这种行为是由操作符优先级决定的,如文档 给你所示。

I'm going to show you how to find the answer yourself next time you have a question similar to this. You can deconstruct how the expression parses using the ast module:

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