问题:Python中“(1,)== 1”是什么意思?
我正在测试元组结构,当我==
像这样使用运算符时发现它很奇怪:
>>> (1,) == 1,
Out: (False,)
当我将这两个表达式分配给变量时,结果为true:
>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
在我看来,这个问题与Python元组尾随逗号语法规则不同。请问==
运算符之间的表达式组。
回答 0
其他答案已经向您显示该行为是由于运算符的优先级所致,如此处所述。
下次您遇到类似问题时,我将向您展示如何找到答案。您可以使用以下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())
)])
回答 1
这只是运算符的优先级。你的第一个
(1,) == 1,
像这样的团体:
((1,) == 1),
因此,根据将一个元素的元组1,
与整数1
进行相等性比较的结果来构建一个具有单个元素的元组False,
。
回答 2
当你做
>>> (1,) == 1,
它通过将元组 (1,)
与整数进行比较并返回来生成一个元组False
。
相反,当您分配变量时,两个相等的元组会相互比较。
你可以试试:
>>> x = 1,
>>> x
(1,)