当前位置: 首页 > news >正文

Python中in和is关键字详解和使用

在 Python 中,inis 是两个常用但含义不同的关键字,初学者很容易混淆它们的用法。下面是关于它们的详细解释、注意事项及常见示例。


一、关键字 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 区别总结

特性inis
类型成员运算符身份运算符
判断内容某元素是否存在于容器中两个变量是否指向同一个对象
返回值类型True / FalseTrue / 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:错误语法;不能混用 isin

六、推荐实践建议

  • 判断引用关系用 is,尤其是与 None 比较时。
  • 判断容器中是否包含元素,统一使用 in
  • 判断两个变量值是否相等,用 ==,不是 is
  • 永远不要使用 is 来判断数值、字符串等是否相等,除非你确定它们是否是同一对象。

相关文章:

  • 智脑进化:神经网络如何从单层感知机迈向深度学习新纪元
  • 【实测有效】Edge浏览器打开部分pdf文件显示空白
  • qt5.14.2 opencv调用摄像头显示在label
  • 小白学编程之——深入理解Java线程的完整生命周期
  • 【Boost搜索引擎】构建Boost站内搜索引擎实践
  • 《数字藏品APP开发:解锁高效用户身份认证与KYC流程》
  • 一个进程中可以有多个 WebView2 控件,它们各自有独立的用户数据目录,COOKIE共享
  • SpringBoot + Shiro + JWT 实现认证与授权完整方案实现
  • git版本控制学习
  • 本地跑通vue-element-admin项目
  • C++循环效率比较与优化建议
  • [逆向工程]DebugView捕获WPS日志?解析未运行WPS时Shell扩展加载的原因与解决方案(二十五)
  • 机器学习前言2
  • 从银行排队到零钱支付:用“钱包经济学”重构Java缓存认知
  • 【无标题】威灏光电哲讯科技MES项目启动会圆满举行
  • Vue主题色切换实现方案(CSS 变量 + 类名切换)
  • 存储器上如何存储1和0
  • 类模板的简单实例
  • mybatisPlus 新增时 其他字段的值和 id 保持一致实现方法
  • 基于Unity的简单2D游戏开发
  • “GoFun出行”订单时隔7年扣费后续:平台将退费,双方已和解
  • 在本轮印巴冲突的舆论场上也胜印度一筹,巴基斯坦靠什么?
  • 病重老人被要求亲自取钱在农业银行门口去世?株洲警方介入
  • “中国神湖”加快放大资源规模!3亿美元换海外年产380万吨钾盐项目
  • 习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式
  • 新闻1+1丨婚姻登记服务,如何跑出幸福加速度?