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文檔開始,然后沿著黃磚路(閱讀:鏈接)進行操作。
添加回答
舉報