2 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
在Python中,左操作數(shù)總是在右操作數(shù)之前計(jì)算。這也適用于函數(shù)參數(shù)。
Python 在計(jì)算涉及 or 運(yùn)算符的表達(dá)式時(shí)使用短路。使用這些運(yùn)算符時(shí),除非需要解析結(jié)果,否則 Python 不會(huì)計(jì)算第二個(gè)操作數(shù)。這允許諸如 和 之類的語句可靠地工作。and
or
if (s != None)
(len(s) < 10): ...
year % 4 == 0 and year % 100 != 0 or year % 400 == 0

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
豐富的比較運(yùn)算符總是首先詢問左操作數(shù)(除非右操作數(shù)是左操作數(shù)類型的子類的實(shí)例;此處不是這種情況)。如果檢查的第一個(gè)操作數(shù)返回(在與數(shù)組進(jìn)行比較時(shí)總是如此,因?yàn)樗豢赡軐⑺鼈兊闹R(shí)嵌入到核心解釋器中),則要求第二個(gè)操作數(shù)執(zhí)行反射比較(不會(huì)改變)。NotImplementedlistnumpy__eq__
由于將知識(shí)烘焙到它的 中,并且沒有烘焙數(shù)組的知識(shí),要么先去并立即使用自己的邏輯(當(dāng)它是左操作數(shù)時(shí)),要么先去(當(dāng)它是左操作數(shù)時(shí)),通過返回放棄,然后 's 進(jìn)行最終調(diào)用。numpylist__eq__listnumpynumpylistNotImplementednumpy__eq__
調(diào)用的粗略內(nèi)部(省略子類特殊情況):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
有關(guān)完整的詳細(xì)信息,請(qǐng)從NotImplemented文檔開始,然后沿著黃磚路(閱讀:鏈接)進(jìn)行操作。
添加回答
舉報(bào)