“if x”和“if x not not”之间的区别

时间:2010-10-10 16:33:35

标签: python boolean

似乎“if x”对于较长的“if x is not None”语法几乎就像是短手。它们在功能上是否相同,或者在某些情况下,对于给定的x值,两者会以不同的方式进行评估吗?

我认为这种行为在Python实现中也应该是相同的 - 但是如果存在细微的差异,那么很高兴知道。

5 个答案:

答案 0 :(得分:51)

在以下情况中:

test = False 
test = "" 
test = 0
test = 0.0 
test = []
test = () 
test = {} 
test = set()

if测试会有所不同:

if test: #False

if test is not None: #True 

这是因为is测试身份,意味着

test is not None

相当于

id(test) == id(None) #False

因此

(test is not None) is (id(test) != id(None)) #True

答案 1 :(得分:36)

前者测试真实性,而后者测试身份None。很多值都是错误的,例如False0''None,但只有NoneNone

答案 2 :(得分:5)

x = 0
if x: ...  # False
if x is not None: ... # True

答案 3 :(得分:3)

if x:
    # Evaluates for any defined non-False value of x
if not x:
    # Evaluates for any defined False value of x
if x is None:
    # Evaluates for any instances of None

没有它自己的类型,恰好是假的。 “if not x”评估x = None,仅因为None为False。

我所知道的并没有任何微妙的差异,但在确切情况下,有确切的方法可以测试用于积极性/消极性。混合它们可以在某些情况下起作用,但如果不理解它们会导致问题。

if x is True:
    # Use for checking for literal instances of True
if x is False:
    # Use for checking for literal instances of False
if x is None:
    # Use for checking for literal instances of None
if x:
    # Use for checking for non-negative values
if not x:
    # Use for checking for negative values
    # 0, "", None, False, [], (), {} are negative, all others are True

答案 4 :(得分:1)

python中的所有内容都有bool值。 值为True,False,None

一切都是对错

0为假

[],(),{},''为False(一切都为空)

[False],('hello'),'hello'等等都是True('原因不是空的)

只有无是..

>>> x = None
>>> if not x:print x #because bool(None) is False

None
>>> if x == None:print x

None
>>> x = False
>>> if not x:print x

False
>>> if x == None:print x

>>> 

最后,请注意,True和False是1和0的'特殊'版本...... 例如

>>>True + 1
2
>>>False + 1
1
>>>range(1, 5)[False]
1