似乎“if x”对于较长的“if x is not None”语法几乎就像是短手。它们在功能上是否相同,或者在某些情况下,对于给定的x值,两者会以不同的方式进行评估吗?
我认为这种行为在Python实现中也应该是相同的 - 但是如果存在细微的差异,那么很高兴知道。
答案 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
。很多值都是错误的,例如False
,0
,''
和None
,但只有None
是None
。
答案 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