似乎"if x"对于较长的"if x is not None"语法几乎就像是短手.它们在功能上是否相同,或者在某些情况下,对于给定的x值,两者的评估方式不同?
我认为这些行为在Python实现中也应该是相同的 - 但如果存在细微差别,那么知道它会很棒.
sys*_*out 57
在以下情况中:
test = False
test = ""
test = 0
test = 0.0
test = []
test = ()
test = {}
test = set()
Run Code Online (Sandbox Code Playgroud)
该if测试将有所不同:
if test: #False
if test is not None: #True
Run Code Online (Sandbox Code Playgroud)
这是因为is测试身份,意义
test is not None
Run Code Online (Sandbox Code Playgroud)
相当于
id(test) == id(None) #False
Run Code Online (Sandbox Code Playgroud)
因此
(test is not None) is (id(test) != id(None)) #True
Run Code Online (Sandbox Code Playgroud)
if x检查是否x被视为True。
在Python中,一切都有一个布尔值(True/ False)。
被视为的值False:
False,None0, 0.0,0j[], (),{}''其他值被视为True。例如,[False], ('hello'),'hello'被视为True(因为它们不为空)。
使用时if x is not None,您正在检查是否x不是None,但它可以是False或其他被视为的实例False。
>>> x = None
>>> if not x:print x # bool(None) is False
None
>>> if x == None:print x
None
>>> x = False
>>> if not x:print x
False
>>> if x == None:print x
Run Code Online (Sandbox Code Playgroud)
最后,请注意True和False分别等于1和0:
>>> True + 1
2
>>> False + 1
1
>>> range(1, 5)[False]
1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15257 次 |
| 最近记录: |