在Python中“(1,)== 1”的含义是什么?

我正在testing元组结构,当我使用==运算符时,发现它很奇怪:

 >>> (1,) == 1, Out: (False,) 

当我将这两个expression式分配给一个variables时,结果是正确的:

 >>> a = (1,) >>> b = 1, >>> a==b Out: True 

这个问题不同于我的观点中的Python元组尾随逗号语法规则 。 我要求==运算符之间的expression式组。

其他答案已经告诉你,这个行为是由于运营商的优先权, 这里logging 。

我会告诉你如何在下次遇到类似问题时自己find答案。 您可以使用ast模块解构expression式parsing的方式:

 >>> 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()))]) 

从这里我们可以看到,代码被parsing为Tim Peters解释 :

 Module([Expr( Tuple([ Compare( Tuple([Num(1)], Load()), [Eq()], [Num(1)] ) ], Load()) )]) 

这只是运营商的优先权。 你的第一个

 (1,) == 1, 

这样的团体:

 ((1,) == 1), 

所以从比较一元元组1,的结果到相等的整数1构build一个元组它们是不相等的,所以你得到1元组False,作为结果。

当你这样做

 >>> (1,) == 1, 

它通过将元 (1,)与一个整数进行比较来构build一个元组,从而返回False

相反,当你分配给variables,两个相等的元组相互比较。

你可以试试:

 >>> x = 1, >>> x (1,)