在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,)