3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
這取決于什么next。
如果是字符串(如您的示例中所示),則in檢查子字符串。
>>> "in" in "indigo"
True
>>> "in" in "violet"
False
>>> "0" in "10"
True
>>> "1" in "10"
True
如果它是另一種可迭代的類型(列表,元組,集合,字典...),則in檢查成員資格。
>>> "in" in ["in", "out"]
True
>>> "in" in ["indigo", "violet"]
False
在字典中,成員資格被視為“關(guān)鍵之一”:
>>> "in" in {"in": "out"}
True
>>> "in" in {"out": "in"}
False

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
由于您聲稱習(xí)慣于JavaScript:
Python in運(yùn)算子類似于JavaScript in運(yùn)算子。
這是一些JavaScript:
var d = {1: 2, 3: 4};
if (1 in d) {
alert('true!');
}
和等效的Python:
d = {1: 2, 3: 4}
if 1 in d:
print('true!')
對(duì)于對(duì)象/字典,它們幾乎相同,都檢查1對(duì)象/字典的密鑰是否。當(dāng)然,最大的區(qū)別是JavaScript是草率類型的,所以'1' in d也是如此。
對(duì)于數(shù)組/列表,它們有很大的不同。JS數(shù)組是一個(gè)對(duì)象,其索引是鍵,所以1 in [3, 4, 5]將是true。Python列表與dict完全不同,它的in運(yùn)算符檢查值,而不是索引,這通常會(huì)更有用。Python將這種行為擴(kuò)展到了所有可迭代對(duì)象。
使用字符串,它們甚至?xí)兴煌?。JS字符串不是對(duì)象,因此您將獲得TypeError。但是Python str或unicode會(huì)檢查另一個(gè)操作數(shù)是否是子字符串。(這1 in '123'是非法的,因?yàn)?它不能是任何東西的子串,但它'1' in '123'是真實(shí)的。)
以對(duì)象為對(duì)象,在JS中當(dāng)然沒(méi)有區(qū)別,但是在Python中,對(duì)象是類的實(shí)例,而不是字典。因此,在JS中,1 in d如果對(duì)象具有名為的成員或方法'1',則該參數(shù)為true ,但在Python中,這取決于類的含義-Python將調(diào)用d.__contains__(1),然后,如果失敗,它將嘗試將您的對(duì)象用作一個(gè)可發(fā)音的(通過(guò)調(diào)用其__iter__,如果失敗,則嘗試使用以開(kāi)頭的整數(shù)對(duì)其進(jìn)行索引0)。
另外,請(qǐng)注意in,因?yàn)镴S的實(shí)際上是在檢查對(duì)象成員資格,所以通常進(jìn)行JS方法的分辨率順序搜索,而Python的in因?yàn)闄z查的是dict的鍵,序列的成員等,則不會(huì)執(zhí)行此類操作。因此,從技術(shù)上講,它可能hasOwnProperty比in操作員更接近該方法。
添加回答
舉報(bào)