python - 我是否应该明确地与 None 进行比较
问题描述
我有一个相对简单的 Python 代码:
import threading
class Foo():
def __init__(self):
self._thread = None
def start(self):
self._thread = threading.Thread(...)
def stop(self):
if self._thread:
...
一位同事建议我应该在功能上None
明确比较:stop
if self._thread is not None:
我不确定哪个版本更 Pythonic:隐式或显式检查?另外,如果我使用任何其他类型(除了集合,在布尔上下文测试中评估空性时)我应该None
明确比较吗?
解决方案
这取决于您的变量可能采用的值以及您的代码的期望值。如果您的变量可能采用其他虚假None
值,那么是的,和之间的差异[]
可能很大,您需要明确检查is None
.
但不总是。如果您的值是falsey []
,并且您正在编写 anif foo:
来确定您是否有需要处理的值怎么办?好吧,一个空列表可能也不需要处理,因为它是空的。所以两者None
和[]
都可以被同等对待。在这种情况下,您需要显式检查is None
and和空列表,在这种情况下if foo:
已经非常简洁地封装了两者。
在您的情况下,如果变量可以是None
or 或 a Thread
,则无论您是否添加都没有区别is not None
,它在两种情况下的行为都相同。那么为什么让它比它需要的更冗长呢?
没有一条规则适合所有情况。
推荐阅读
- prometheus - Tomcat 9 中的 jmx_exporter 在 catalina.out 中报告错误
- mariadb - Not able to drop field in MariaDB table
- android - How to manage Flutter dependencies' dependencies?
- reactjs - React useState 在通过传播引用克隆数组时不会重新渲染
- video - Autoplay Drive embedded video after clicking on image
- python - Python:使用 OpenCV 从左上角到右下角对项目进行排序
- html - How to get my sub-menus to expand upwards?
- html - Responsivity Misconfiguration
- docker - 无法读取 dockerfile - .NET 5.0
- javascript - 将 JavaScript 对象转换为浮点数