Python如何确定==的操作数优先级?

将 s 与运算符进行比较将返回 .list==bool


>>> [0,0,0] == [0,1,0]

False

将数组与运算符进行比较将返回由元素明智的比较生成的另一个数组。numpy==


>>> np.array([0,0,0]) == np.array([0,1,0])

array([ True, False,  True])

如果我混合操作数类型,则该方法始终优先。numpy


>>> np.array([0,0,0]) == [0,1,0]

array([ True, False,  True])

>>> [0,0,0] == np.array([0,1,0])

array([ True, False,  True])

如何确定哪个操作数具有优先级?我的问题更多地与 的机制有关,而不是与 或 .PythonPythonnumpylist


炎炎设计
浏览 155回答 2
2回答

米脂

在Python中,左操作数总是在右操作数之前计算。这也适用于函数参数。Python 在计算涉及 or 运算符的表达式时使用短路。使用这些运算符时,除非需要解析结果,否则 Python 不会计算第二个操作数。这允许诸如 和 之类的语句可靠地工作。andorif (s != None)(len(s) < 10): ...year % 4 == 0 and year % 100 != 0 or year % 400 == 0

繁星淼淼

丰富的比较运算符总是首先询问左操作数(除非右操作数是左操作数类型的子类的实例;此处不是这种情况)。如果检查的第一个操作数返回(在与数组进行比较时总是如此,因为它不可能将它们的知识嵌入到核心解释器中),则要求第二个操作数执行反射比较(不会改变)。NotImplementedlistnumpy__eq__由于将知识烘焙到它的 中,并且没有烘焙数组的知识,要么先去并立即使用自己的逻辑(当它是左操作数时),要么先去(当它是左操作数时),通过返回放弃,然后 's 进行最终调用。numpylist__eq__listnumpynumpylistNotImplementednumpy__eq__调用的粗略内部(省略子类特殊情况):left == rightattempt = type(left).__eq__(left, right)if attempt is NotImplemented:&nbsp; &nbsp;attempt = type(right).__eq__(right, left)&nbsp; &nbsp;if attempt is NotImplemented:&nbsp; &nbsp; &nbsp; &nbsp;attempt = False&nbsp; # Specific to __eq__, if both can't compare, returns Falsereturn attempt有关完整的详细信息,请从NotImplemented文档开始,然后沿着黄砖路(阅读:链接)进行操作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python