我正在测试元组结构,我发现使用 ==运算符时很奇怪,比如:
==
>>> (1,) == 1, Out: (False,)
当我把这两个表达式赋给一个变量时,结果是真的:
>>> a = (1,) >>> b = 1, >>> a==b Out: True
这个问题在我看来与 Python 元组后跟逗号语法规则不同,我问的是 ==运算符之间的一组表达式。
这只是运算符优先级,你的第一个
(1,) == 1,
这样的团体:
((1,) == 1),
因此,通过比较一元素元组 1,和整数 1的相等性,构建一个包含单个元素的元组,它们是不相等的,所以得到的结果是1元素元组 False,。
1,
1
False,
等你找到的时候
>>> (1,) == 1,
它通过比较 Tuple (1,)和 整数的结果来构建元组,从而返回 False。
(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:
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()) )])