Python:测试 None,测试布尔值
这段话在问,不同的方法在底层实现上有没有什么区别,特别是性能方面的差异。
# 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:
等等要好。