Python:测试 None,测试布尔值

10 投票
3 回答
13899 浏览
提问于 2025-04-16 23:27

这段话在问,不同的方法在底层实现上有没有什么区别,特别是性能方面的差异。

# check if string is empty
# the preferred way it seems [1]
if string:
    print string
else:
    print "It's empty."

# versus [2]
if string is '':

# or [3]
if string == '':

举个例子,当我在检查一个变量是否是 None 时,我觉得这样写更清晰:

if some_var is not None:

..而不是这样写..

if not some_var:

if not some_var,对我来说,这总是让人觉得“如果这个变量不存在”。

那么,使用哪种方式更好呢?==is 和布尔测试各自适合什么情况呢?

3 个回答

2

首先,不要用 if string is '': 这种写法,因为这并不一定能正常工作。CPython 处理短字符串的方式是一个实现细节,我们不应该依赖它。

if string: 来检查 string 是否不为空,我觉得这是更符合 Python 风格的做法。

不过,使用 if string == '' 也是没有什么 错误 的。

5

来详细解释一下Tim Pietzcker的回答:

if string:
    print string

这个代码是用来检查string是否为真值。也就是说,

>>> bool("")
False
>>> bool(None)
False
>>> bool("test")
True

它不仅仅是在检查这个字符串是否为空,还在检查它是否是None或者为空。根据你如何处理None或空值,这可能会有不同的影响。

8

不要用 is 来判断值是否相等。它只应该用来检查两个对象是否是同一个东西。虽然在像 if string is '' 这样的例子中可能看起来有效,但这其实是跟具体的实现有关的,你不能完全依赖它。

>>> a = "hi"
>>> a is "hi"
True
>>> a = "hi there!"
>>> a is "hi there!"
False

除此之外,使用最能表达你代码意思的方式。

我个人喜欢用更简短的 if string:,但 if string != '': 可能更清楚。

另外, if variable: 可以适用于所有类型的对象,所以如果 variable 不是固定某一种类型,这种写法比 if variable != "" and variable != 0: 等等要好。

撰写回答