2024-06-16 12:32:29 发布
网友
我正在测试元组结构,当我使用==运算符时发现它很奇怪,比如:
==
>>> (1,) == 1, Out: (False,)
当我将这两个表达式赋给变量时,结果为真:
>>> a = (1,) >>> b = 1, >>> a==b Out: True
在我看来,这些问题与Python tuple trailing comma syntax rule不同。我问==运算符之间的表达式组。
当你这样做的时候
>>> (1,) == 1,
它通过比较元组(1,)与整数的结果来构建元组,从而返回False。
(1,)
False
相反,当您分配给变量时,两个相等元组将相互比较。
您可以尝试:
>>> x = 1, >>> x (1,)
这只是运算符优先级。你的第一个
(1,) == 1,
像这样的团体:
((1,) == 1),
因此,从比较一个元素元组1,与整数1的结果中生成一个具有单个元素的元组,因为它们不相等,所以得到一个结果的1元组False,。
1,
1
False,
其他的答案已经向您表明,该行为是由运算符优先级决定的,如here所述。
下次你有类似的问题时,我会教你如何自己找到答案。可以使用^{}模块解构表达式的解析方式:
>>> 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()) )])
当你这样做的时候
它通过比较元组
(1,)
与整数的结果来构建元组,从而返回False
。相反,当您分配给变量时,两个相等元组将相互比较。
您可以尝试:
这只是运算符优先级。你的第一个
像这样的团体:
因此,从比较一个元素元组
1,
与整数1
的结果中生成一个具有单个元素的元组,因为它们不相等,所以得到一个结果的1元组False,
。其他的答案已经向您表明,该行为是由运算符优先级决定的,如here所述。
下次你有类似的问题时,我会教你如何自己找到答案。可以使用^{} 模块解构表达式的解析方式:
从这里我们可以看到代码被解析as Tim Peters explained:
相关问题 更多 >
编程相关推荐