Python:测试None,测试布尔值

mal*_*ree 10 python

这些方法之间是否存在与实现相关的低级别(性能)?

# 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 == '':
Run Code Online (Sandbox Code Playgroud)

例如,在测试时None,我仍然发现它更具可读性和显性:

if some_var is not None:
Run Code Online (Sandbox Code Playgroud)

..代替..

if not some_var:
Run Code Online (Sandbox Code Playgroud)

if not some_var,至少对我来说,总是读"如果some_var不存在".

哪个更好用,有什么是正确的用例==,is和布尔测试?

Tim*_*ker 8

永远不要is用于(价值)平等测试.仅用它来测试对象标识.它可能适用于示例if string is '',但这取决于实现,您不能依赖它.

>>> a = "hi"
>>> a is "hi"
True
>>> a = "hi there!"
>>> a is "hi there!"
False
Run Code Online (Sandbox Code Playgroud)

除此之外,使用任何最好地传达代码含义的东西.

我更喜欢短if string:,但if string != '':可能更明确.

然后再次if variable:对每种对象起作用,所以如果variable不限于一种类型,这比if variable != "" and variable != 0:等等更好.


Jac*_*cob 5

扩展Tim Pietzcker的答案:

if string:
    print string
Run Code Online (Sandbox Code Playgroud)

这将测试是否string为True.IE

>>> bool("")
False
>>> bool(None)
False
>>> bool("test")
True
Run Code Online (Sandbox Code Playgroud)

所以它不仅测试它是否为空,而且如果它是None空的.这可能会产生影响,具体取决于您如何对待None/清空.