Python中in和is关键字详解和使用
在 Python 中,in
和 is
是两个常用但含义不同的关键字,初学者很容易混淆它们的用法。下面是关于它们的详细解释、注意事项及常见示例。
一、关键字 in
:成员运算符
1. 功能
用于判断某个元素是否存在于序列(如列表、元组、字符串、集合、字典)中。
2. 基本语法
element in container # 返回 True 或 False
3. 示例
# 字符串
'a' in 'apple' # True# 列表
3 in [1, 2, 3, 4] # True# 元组
'x' in ('x', 'y') # True# 字典(判断的是“键”)
d = {'a': 1, 'b': 2}
'a' in d # True
1 in d # False# 集合
5 in {1, 2, 3, 5} # True
4. 注意事项
注意点 | 说明 |
---|---|
字典中 in 判断的是键,不是值 | |
in 实际调用的是容器的 __contains__() 方法 | |
可以用于 for x in ... 的迭代语句中 |
5. 与 not in
结合使用
if 'x' not in ['a', 'b', 'c']:print("x 不在列表中")
二、关键字 is
:身份运算符
1. 功能
用于判断两个变量是否引用的是同一个对象(即内存地址是否相同)。
2. 基本语法
a is b # True if a 和 b 是同一个对象
a is not b # True if a 和 b 是不同对象
3. 示例
a = [1, 2, 3]
b = a
c = [1, 2, 3]print(a is b) # True,引用同一对象
print(a is c) # False,虽然值相等,但不是同一对象
print(a == c) # True,值相等
4. 常见应用场景
- 判断是否为
None
:推荐使用is
而不是==
x = None
if x is None:print("x is None")
- 类型判断不推荐使用
is
# 不推荐:
type(x) is int# 推荐:
isinstance(x, int)
三、in
vs is
区别总结
特性 | in | is |
---|---|---|
类型 | 成员运算符 | 身份运算符 |
判断内容 | 某元素是否存在于容器中 | 两个变量是否指向同一个对象 |
返回值类型 | True / False | True / False |
应用场景 | 序列判断、包含性检查 | None 判断、引用对象判断 |
四、综合示例
a = [1, 2, 3]
b = a
c = [1, 2, 3]print(2 in a) # True
print(b is a) # True
print(c is a) # False
print(c == a) # Trued = {'k': 10}
print('k' in d) # True(判断键)
print(10 in d) # False(值不在键列表中)x = None
print(x is None) # 推荐写法
print(x == None) # 也可以,但不推荐
五、常见错误与误区
错误写法 | 问题说明 |
---|---|
if x == None: | 不推荐;应该使用 x is None 更明确 |
if a is [1, 2, 3]: | 错误;新列表对象地址不同,虽然值一样,但不是一个对象 |
if 3 is in lst: | 错误语法;不能混用 is 与 in |
六、推荐实践建议
- 判断引用关系用
is
,尤其是与None
比较时。 - 判断容器中是否包含元素,统一使用
in
。 - 判断两个变量值是否相等,用
==
,不是is
。 - 永远不要使用
is
来判断数值、字符串等是否相等,除非你确定它们是否是同一对象。