我应该与无显式比较

问题描述 投票:1回答:1

我有一个相对简单的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进行显式比较?

python nonetype
1个回答
0
投票

这取决于变量可能采用的值以及代码的期望值。如果您的变量可能采用其他falsey值,则可以,None[]之间的差异可能很大,您需要显式检查is None

但并非总是如此。如果您的值是falsey [],并且您正在编写if foo:来确定您是否有一个需要处理的值怎么办?好吧,一个空列表可能也不需要处理,因为它是空的。因此None[]可以被视为相同。在这种情况下,您需要显式检查is None and和空列表,在这种情况下,if foo:已经非常简洁地封装了两者。

没有一个适合所有情况的规则。

© www.soinside.com 2019 - 2024. All rights reserved.