In [77]: a = [1,2] In [78]: b = [1,2] In [79]: id(a) Out[79]: 1552668915144 In [80]: id(b) Out[80]: 1552668915208 In [81]: a is b Out[81]: False In [83]: a isnot b Out[83]: True In [84]: not a is b Out[84]: True
In [85]: a = [] In [86]: b = [] In [87]: id(a) Out[87]: 1552668699208 In [88]: id(b) Out[88]: 1552669048456 In [89]: a is b Out[89]: False
(3) 对于序列型、字典型、集合型对象,一个对象实例指向另一个对象实例,is 比较才返回真值。
1 2 3 4
In [95]: a = [1,2] In [96]: b = a In [97]: a is b Out[97]: True
In [90]: a = 12345 In [91]: b = 12345 In [92]: id(a) Out[92]: 1552668913040 In [93]: id(b) Out[93]: 1552668911312 In [94]: a is b Out[94]: False
(5) Python 中 None 对象是一个单例类的实例,具有唯一的标识号,在判断某个对象是否为 None 时,最便捷的做法:variable is None,如下:
1 2 3 4 5 6 7
In [98]: id(None) Out[98]: 140708411956448 In [99]: a = None In [100]: a isNone Out[100]: True In [101]: id(a) Out[101]: 140708411956448
in 用于成员检测
如果元素 i 是 s 的成员,则 i in s 为 True;
若不是 s 的成员,则返回 False,也就是i not in s 为 True
in 是判断成员是否属于某个序列,in 后即可以跟字符串,也可以跟列表,实际上各种集合类型都可以。
(1) 对于字符串类型,i in s 为 True,意味着 i 是 s 的子串。
1 2 3 4 5
In [104]: '234'in'12345' Out[104]: True # 当然。也可以用字符串的find()方法判断 In [105]: '12345'.find('234') Out[105]: 1
(2)列表中任何数据类型的元素都可以用in判断,同理,元祖和集合也可以这样做
1 2 3 4 5 6 7
In [106]: [1,2] in [[1,2],3,'abc'] Out[106]: True In [107]: lst = [[1,2],3,'abc'] In [109]: [1,2] in lst Out[109]: True In [110]: 'abc'in lst Out[110]: True
(3)对于字典类型,in 操作判断 i 是否是字典的键,但不能直接判断值,如果要判断一个值是否在字典中,可以用字典的values()方法
1 2 3 4 5 6 7 8 9 10 11 12
In [111]: dct = {'a':12,'b':35,'key':'abc'} In [112]: 'a'in dct Out[112]: True In [113]: 'key'in dct Out[113]: True
In [114]: 12in dct Out[114]: False In [115]: 12in dct.values() Out[115]: True In [116]: 'abc'in dct.values() Out[116]: True
(4)对于自定义类型,判断是否位于序列类型中,需要重写序列类型的 魔法方法 contains。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
classNode(): def__init__(self,value): self.value = value classNodes(list): def__contains__(self,node): for s in self: if s.value == node.value: returnTrue returnFalse
n1 = Node('linear') n2 = Node('sigmoid') a = Nodes() a.extend([n1,n2]) n3 = Node('linear') print(n3 in a) # True n4 = Node('tanh') print(n4 in a) # False