我在测试元组结构,然后发现像下面这样使用 == 操作符时很奇怪:>>> (1,) == 1,
Out: (False,)
当我把这两个表达式赋值给变量,结果又是真值:>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
这个问题在我看来不同于Python元组尾逗号的语法规则,我是问 == 操作符之间的表达式组。
这是操作符优先级导致的,可阅读此文档。
我来告诉你在下次遇到类似问题的是否怎么查找答案。你可以使用 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()))])
从这里我们看到代码解析成如Tim Peters解释的那样:Module([Expr(
Tuple([
Compare(
Tuple([Num(1)], Load()),
[Eq()],
[Num(1)]
)
], Load())
)])