十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

布尔值 bool 与空值 None-001

布尔值 bool 与空值 None-001 文章目录2.1 布尔值 bool 与空值 None2.1.1 布尔值 bool1. 本质与类型运维场景磁盘使用率阈值告警IP相等判断3. 运维场景典型用法2.1.2 空值 None1. 核心区分None 不等于这些值2. 三大典型使用场景1变量初始化占位2函数无返回值或执行失败3标识缺失/不存在的结果3. 正确判断 None 的方式为什么必须用 is2.1.3 真值测试隐式布尔转换1. 常见假值Falsy2. 常见真值Truthy3. 运维场景的避坑指南坑点不要用 if not x 混淆“失败”和“空结果”正确写法按业务语义分别判断2.1.4 小结2.1 布尔值 bool 与空值 None布尔值bool与空值None是Python中最基础的逻辑标记类型贯穿所有条件判断、状态标识、结果返回场景是运维脚本中控制流程、处理异常、校验数据的核心工具。2.1.1 布尔值 bool布尔值是表示“真/假”“是/否”的二值类型全程只有两个固定取值True真和False假首字母必须大写小写的true/false会被识别为普通变量名直接触发未定义错误。1. 本质与类型bool是int类型的子类可通过代码验证print(issubclass(bool, int)) # 输出 True- 数值等价性True 等价于整数 1False 等价于整数 0语法上可直接参与数值运算。 注意**不推荐在业务代码中将布尔值当数字使用**。虽然语法支持但会严重降低代码可读性。布尔值的核心作用是表达逻辑状态而非参与数值计算。 ### 2. 布尔值的核心来源 布尔值通常不需要手动赋值大多是运算与判断的结果主要有四大来源 #### 1比较运算 所有大小比较、相等判断都会返回布尔值是条件判断最常用的形式。运维场景磁盘使用率阈值告警disk_usage 85is_alarm disk_usage 80 # 超过80%触发告警print(is_alarm) # TrueIP相等判断target_ip “192.168.1.100”print(target_ip “192.168.1.100”) # True#### 2成员运算 判断元素是否在容器中返回布尔值常用于IP白名单校验、权限判断。ip_white_list [“192.168.1.1”, “192.168.1.2”]print(“192.168.1.100” in ip_white_list) # False#### 3身份运算 判断两个对象是否为同一个内存实例最典型的就是 is None 空值判断。 #### 4逻辑运算新手常见误区 - not 运算一定返回布尔值对原条件取反。 print(not True) # False print(not 0) # Trueand/or运算不会返回布尔值而是返回两个操作数中的一个短路求值机制。print(0 and 5) # 返回 0左边为假短路返回左边 print(3 and ok) # 返回 ok左边为真返回右边 print(None or 22) # 返回 22左边为假返回右边误区提醒不要认为逻辑运算的结果都是布尔值。and/or的结果可以直接用于if判断会自动做真值测试但不要直接和True/False做相等比较。and左边为假则直接返回左边否则返回右边or左边为真则直接返回左边否则返回右边。3. 运维场景典型用法布尔值主要用于流程控制的条件判断、状态标记比如标记服务器在线状态is_online True标记告警是否触发is_triggered cpu_usage 90标记备份功能是否启用enable_backup True【实例2-1】 布尔值的使用与本质# 定义状态布尔变量 is_server_online True is_disk_full False # 比较运算返回布尔值 print(80 90, 80 90) # False print(IP匹配, 192.168.1.1 192.168.1.1) # True # 布尔值的数值本质仅演示原理不推荐业务代码这么写 print(True 10 , True 10) # 11 print(False * 5 , False * 5) # 0 # 运维常用技巧or 设置默认值 config_port None use_port config_port or 22 # 配置为空时使用默认SSH端口22 print(使用端口, use_port) # 222.1.2 空值 NoneNone是Python中唯一的空值类型属于NoneType类型且全局只有一个实例单例。它的语义是「不存在、未赋值、无结果」是一个独立的特殊值。1. 核心区分None 不等于这些值新手最容易混淆的点None和「零、空、假」不是一回事。print(None 0) # False print(None ) # False print(None False) # False print(None []) # False空列表也不是None print(None {}) # False空字典也不是None本质区别0、、[]都是「有值」的只是值为零/空内容类型分别是int、str、listNone是「没有值」是独立的NoneType类型代表“不存在”。2. 三大典型使用场景1变量初始化占位定义变量时暂时不知道具体值先用None占位明确表示“未赋值”状态避免未定义变量报错。# 运维场景先定义变量后续查询资产后赋值 server_asset_info None2函数无返回值或执行失败Python中没有写return的函数执行结束后默认返回None业务逻辑中查询失败、操作出错时通常返回None表示异常结果。3标识缺失/不存在的结果数据库查询为空、配置项不存在、接口无数据时用None表示“没有结果”注意和“结果为空集合”区分开。运维场景举例查询服务器列表返回[]查询成功只是没有符合条件的设备查询服务器列表返回None查询接口调用失败、数据库连接异常。两者业务含义完全不同处理逻辑也不一样。3. 正确判断 None 的方式判断变量是否为None必须使用is None判断非None用is not None这是Python全行业通用的最佳实践禁止使用 None/! None。为什么必须用 isis是身份运算符判断两个对象是不是同一个内存实例。None是全局单例所有赋值为None的变量都指向同一个内存地址is判断既快又准。是值运算符会调用对象的__eq__方法可以被自定义类重写可能出现“等于None但实际不是None”的异常情况存在逻辑风险。【实例2-2】 None的使用场景与判断# 初始化占位 server_info None print(类型, type(server_info)) # class NoneType # None与其他空值的区别 print(None 0, None 0) # False print(None 空串, None ) # False print(None False, None False) # False # 运维场景查询服务器详情失败返回None def get_server_detail(ip): # 模拟查询失败 return None result get_server_detail(192.168.1.100) # 正确的判断方式 if result is None: print(查询失败服务器信息不存在) else: print(查询成功, result)老韩提示写运维脚本的时候所有不确定是否存在的返回值、可选配置项都先初始化为None使用前先通过is None判断是否有效。这是写出健壮性代码的基本习惯能避免大量空值异常AttributeError、TypeError等。2.1.3 真值测试隐式布尔转换Python中所有对象都可以通过if、while等条件语句进行真值测试自动转换为布尔值不需要显式写 True。这是Python条件判断的核心机制也是新手最容易踩坑的地方。1. 常见假值Falsy以下对象在真值测试中会被判定为False空值None布尔假False数值零0、0.0、0j空序列空字符串、[]空列表、()空元组空映射/集合{}空字典、set()空集合2. 常见真值Truthy除了上面的假值绝大多数对象都会被判定为True比如非零数字1、-5、3.14非空字符串 仅含空格的字符串也是真、0非空容器[0]、{None}3. 运维场景的避坑指南坑点不要用if not x混淆“失败”和“空结果”# 反例逻辑错误 def get_server_list(): # 模拟查询成功但没有符合条件的设备 return [] server_list get_server_list() if not server_list: print(查询失败) # 错误空列表也会触发这里但实际是查询成功的正确写法按业务语义分别判断# 正例区分None和空列表 if server_list is None: print(查询失败接口异常) elif not server_list: print(查询成功暂无符合条件的服务器) else: print(f查询成功共{len(server_list)}台服务器)总结如果要判断「是否不存在/是否失败」用is None如果要判断「内容是否为空」用if not x两者业务含义不同不要混用。2.1.4 小结布尔值只有True和False两个取值用于条件判断与状态标识本质是int的子类但不推荐当作数字使用。逻辑运算中not返回布尔值and/or返回操作数本身短路求值而非布尔值。空值None是独立的NoneType类型全局唯一实例表示「不存在、未赋值」不等于0、空字符串、空列表或False。判断None必须使用is None/is not None这是行业通用最佳实践。所有对象都支持真值测试假值包含None、False、零、空序列/容器使用时注意区分“查询失败None”和“结果为空空容器”的业务差异。
返回列表