2 回答

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

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文档开始,然后沿着黄砖路(阅读:链接)进行操作。
添加回答
举报