Python 中的“(1,) == 1”是什么意思?
What's the meaning of "(1,) == 1," in Python?
我正在测试元组结构,当我使用 ==
运算符时发现它很奇怪,例如:
>>> (1,) == 1,
Out: (False,)
当我将这两个表达式赋给一个变量时,结果为真:
>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
我认为这个问题与Python tuple trailing comma syntax rule不同。我问==
运算符之间的表达式组。
这只是运算符优先级。你的第一个
(1,) == 1,
像这样的群组:
((1,) == 1),
so 根据比较单元素元组 1,
与整数 1
的结果构建一个包含单个元素的元组是否相等 它们不相等,所以你得到 1-结果的元组 False,
。
当你
>>> (1,) == 1,
它用 tuple (1,)
与 integer 比较的结果构建一个元组,从而返回 False
.
相反,当您分配给变量时,两个 相等的元组 会相互比较。
你可以试试:
>>> x = 1,
>>> x
(1,)
其他答案已经向您表明该行为是由于运算符优先级引起的,如记录 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()))])
从这里我们可以看到代码被解析了:
Module([Expr(
Tuple([
Compare(
Tuple([Num(1)], Load()),
[Eq()],
[Num(1)]
)
], Load())
)])
我正在测试元组结构,当我使用 ==
运算符时发现它很奇怪,例如:
>>> (1,) == 1,
Out: (False,)
当我将这两个表达式赋给一个变量时,结果为真:
>>> a = (1,)
>>> b = 1,
>>> a==b
Out: True
我认为这个问题与Python tuple trailing comma syntax rule不同。我问==
运算符之间的表达式组。
这只是运算符优先级。你的第一个
(1,) == 1,
像这样的群组:
((1,) == 1),
so 根据比较单元素元组 1,
与整数 1
的结果构建一个包含单个元素的元组是否相等 它们不相等,所以你得到 1-结果的元组 False,
。
当你
>>> (1,) == 1,
它用 tuple (1,)
与 integer 比较的结果构建一个元组,从而返回 False
.
相反,当您分配给变量时,两个 相等的元组 会相互比较。
你可以试试:
>>> x = 1,
>>> x
(1,)
其他答案已经向您表明该行为是由于运算符优先级引起的,如记录 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()))])
从这里我们可以看到代码被解析了
Module([Expr(
Tuple([
Compare(
Tuple([Num(1)], Load()),
[Eq()],
[Num(1)]
)
], Load())
)])