为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

炎炎设计 2022-08-11 16:58:30
将 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
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

在Python中,左操作数总是在右操作数之前计算。这也适用于函数参数。

Python 在计算涉及 or 运算符的表达式时使用短路。使用这些运算符时,除非需要解析结果,否则 Python 不会计算第二个操作数。这允许诸如 和 之类的语句可靠地工作。andorif (s != None)(len(s) < 10): ...

year % 4 == 0 and year % 100 != 0 or year % 400 == 0


查看完整回答
反对 回复 2022-08-11
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

丰富的比较运算符总是首先询问左操作数(除非右操作数是左操作数类型的子类的实例;此处不是这种情况)。如果检查的第一个操作数返回(在与数组进行比较时总是如此,因为它不可能将它们的知识嵌入到核心解释器中),则要求第二个操作数执行反射比较(不会改变)。NotImplementedlistnumpy__eq__


由于将知识烘焙到它的 中,并且没有烘焙数组的知识,要么先去并立即使用自己的逻辑(当它是左操作数时),要么先去(当它是左操作数时),通过返回放弃,然后 's 进行最终调用。numpylist__eq__listnumpynumpylistNotImplementednumpy__eq__


调用的粗略内部(省略子类特殊情况):left == right


attempt = type(left).__eq__(left, right)

if attempt is NotImplemented:

   attempt = type(right).__eq__(right, left)

   if attempt is NotImplemented:

       attempt = False  # Specific to __eq__, if both can't compare, returns False

return attempt

有关完整的详细信息,请从NotImplemented文档开始,然后沿着黄砖路(阅读:链接)进行操作。


查看完整回答
反对 回复 2022-08-11
  • 2 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号