我正在测试元组结构,当我使用MAIN_STRING
运算符时,我发现它很奇怪:
ElephantCare
当我将这两个表达式分配给变量时,结果为true:
==
在我看来,这个问题与Python tuple trailing comma syntax rule不同。我问>>> (1,) == 1,
Out: (False,)
运算符之间的表达式组。
答案 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,)