3 回答
TA贡献1865条经验 获得超7个赞
这取决于什么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
在字典中,成员资格被视为“关键之一”:
>>> "in" in {"in": "out"}
True
>>> "in" in {"out": "in"}
False
TA贡献1817条经验 获得超6个赞
由于您声称习惯于JavaScript:
Python in运算子类似于JavaScript in运算子。
这是一些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!')
对于对象/字典,它们几乎相同,都检查1对象/字典的密钥是否。当然,最大的区别是JavaScript是草率类型的,所以'1' in d也是如此。
对于数组/列表,它们有很大的不同。JS数组是一个对象,其索引是键,所以1 in [3, 4, 5]将是true。Python列表与dict完全不同,它的in运算符检查值,而不是索引,这通常会更有用。Python将这种行为扩展到了所有可迭代对象。
使用字符串,它们甚至会有所不同。JS字符串不是对象,因此您将获得TypeError。但是Python str或unicode会检查另一个操作数是否是子字符串。(这1 in '123'是非法的,因为1它不能是任何东西的子串,但它'1' in '123'是真实的。)
以对象为对象,在JS中当然没有区别,但是在Python中,对象是类的实例,而不是字典。因此,在JS中,1 in d如果对象具有名为的成员或方法'1',则该参数为true ,但在Python中,这取决于类的含义-Python将调用d.__contains__(1),然后,如果失败,它将尝试将您的对象用作一个可发音的(通过调用其__iter__,如果失败,则尝试使用以开头的整数对其进行索引0)。
另外,请注意in,因为JS的实际上是在检查对象成员资格,所以通常进行JS方法的分辨率顺序搜索,而Python的in因为检查的是dict的键,序列的成员等,则不会执行此类操作。因此,从技术上讲,它可能hasOwnProperty比in操作员更接近该方法。
添加回答
举报