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

超详解——识别None——小白篇

目录

1. 内建类型的布尔值

2. 对象身份的比较

3. 对象类型比较

4. 类型工厂函数

5. Python不支持的类型

总结:


1. 内建类型的布尔值

在Python中,布尔值的计算遵循如下规则:

  • NoneFalse、空序列(如空列表 [],空字符串 "",空元组 (),空字典 {},空集合 set())以及数值零(如整数 0,浮点数 0.0,复数 0j)在布尔上下文中被认为是 False
  • 其他值在布尔上下文中被认为是 True

示例:

# 以下条件都为False
if not None:print("None is considered False")  # 输出if not False:print("False is considered False")  # 输出if not []:print("Empty list is considered False")  # 输出if not 0:print("Zero is considered False")  # 输出# 非零数值和非空序列为True
if 1:print("1 is considered True")  # 输出if [1, 2, 3]:print("Non-empty list is considered True")  # 输出

2. 对象身份的比较

在Python中,isis not 用于比较两个对象是否是同一个对象。这种比较检查两个对象的内存地址是否相同。

示例:

a = [1, 2, 3]
b = a  # b引用a的同一个对象
c = [1, 2, 3]  # c创建了一个新的列表对象print(a is b)  # True,因为a和b引用同一个对象
print(a is c)  # False,因为a和c是不同的对象,即使它们的内容相同# 一般情况下,使用 == 来比较对象的值
print(a == c)  # True,因为a和c的内容相同

3. 对象类型比较

使用 type() 函数可以获取对象的类型。直接比较类型可以用 type(a) == type(b)。然而,这种比较方式不支持继承关系的判断。

示例:

a = 10
b = 3.14
c = "hello"print(type(a))  # <class 'int'>
print(type(b))  # <class 'float'>
print(type(c))  # <class 'str'>if type(a) == type(b):print("Same type")
else:print("Different types")  # 输出,因为a是int,b是float

为了更灵活的类型检查,可以使用 isinstance() 函数。isinstance() 可以检查一个对象是否是某个类或其子类的实例。

示例:

class Animal:passclass Dog(Animal):passd = Dog()print(isinstance(d, Dog))  # True,因为d是Dog类的实例
print(isinstance(d, Animal))  # True,因为d是Animal类的子类的实例
print(isinstance(d, object))  # True,因为所有类都是object类的子类

4. 类型工厂函数

Python提供了一些内置的工厂函数,用于创建特定类型的对象。这些函数使得创建对象变得简单直接。

示例:

# 将字符串转换为整数
number = int("123")
print(number)  # 123# 将整数转换为字符串
text = str(123)
print(text)  # "123"# 创建一个包含0到4的列表
numbers_list = list(range(5))
print(numbers_list)  # [0, 1, 2, 3, 4]# 创建一个字典
numbers_dict = dict(a=1, b=2)
print(numbers_dict)  # {'a': 1, 'b': 2}# 创建一个集合(自动去重)
unique_numbers = set([1, 2, 2, 3, 4])
print(unique_numbers)  # {1, 2, 3, 4}

5. Python不支持的类型

Python不支持一些底层类型,如指针。在低级编程语言(如C语言)中,指针用于直接操作内存地址。然而,Python通过高级数据结构和内存管理机制,屏蔽了这些复杂性,使编程更简洁和安全。

例如,在C语言中可以使用指针:

int a = 10;
int *p = &a;
printf("%d", *p);  // 输出10

而在Python中,没有指针的概念:

a = 10
b = a
print(b)  # 输出10

总结:

  • None 是一个特殊的常量,表示没有值。
  • 在布尔上下文中,NoneFalse、空序列和零被视为 False
  • 使用 isis not 进行对象身份比较。
  • 使用 type()isinstance() 函数来比较对象类型。
  • 使用内置工厂函数创建特定类型的对象。
  • Python不支持一些底层类型,如指针,确保了高级数据结构和内存管理的简洁性和安全性。

相关文章:

  • 『大模型笔记』什么是提示词注入(Prompt Injection)攻击?
  • Java 并发编程中的 synchronized 关键字及其现代优化技术
  • 写在高考之际
  • OpenAI模型规范概览
  • 技术架构的发展
  • flink 作业报日志类冲突的解决方案
  • java第二十一课 —— 快捷键,包,访问修饰符
  • BubbleML: A Multiphase Multiphysics Dataset and Benchmarks for Machine Learning
  • 数字科技如何助力博物馆设计,强化文物故事表现力?
  • Python私有成员变量:深入解析与实用指南
  • 直播商城源码-PC+APP+H5+小程序现成源码
  • MongoDB CRUD操作:可重试写入
  • WebSocket首次使用踩坑记录
  • 苹果将推出“Apple Intelligence”AI系统,专注于隐私和广泛应用|TodayAI
  • KafkaStream Local Store和Global Store区别和用法
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 2017-08-04 前端日报
  • CentOS7简单部署NFS
  • dva中组件的懒加载
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Nacos系列:Nacos的Java SDK使用
  • SQL 难点解决:记录的引用
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 如何进阶一名有竞争力的程序员?
  • 如何在GitHub上创建个人博客
  • 使用agvtool更改app version/build
  • 听说你叫Java(二)–Servlet请求
  • 用 Swift 编写面向协议的视图
  • 用jquery写贪吃蛇
  • 云大使推广中的常见热门问题
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • # 职场生活之道:善于团结
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • #数学建模# 线性规划问题的Matlab求解
  • $L^p$ 调和函数恒为零
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (搬运以学习)flask 上下文的实现
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (分布式缓存)Redis持久化
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (全注解开发)学习Spring-MVC的第三天
  • (顺序)容器的好伴侣 --- 容器适配器
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • .DFS.
  • .NET Micro Framework初体验
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NetCore项目nginx发布
  • .NET程序员迈向卓越的必由之路
  • .Net多线程Threading相关详解