我(可能是错误的)认为is
运算符正在进行id()比较.
>>> x = 10
>>> y = 10
>>> id(x)
1815480092
>>> id(y)
1815480092
>>> x is y
True
Run Code Online (Sandbox Code Playgroud)
然而,val is not None
看起来它并不那么简单.
>>> id(not None)
2001680
>>> id(None)
2053536
>>> val = 10
>>> id(val)
1815480092
>>> val is not None
True
Run Code Online (Sandbox Code Playgroud)
然后,'是'运营商做了什么?它只是我推测的对象id比较吗?如果是这样,val is not None
在Python中被解释为not (val is None)
?
Mar*_*ers 10
你错过了这is not
是一个操作符太.
没有is
,常规not
运算符返回一个布尔值:
>>> not None
True
Run Code Online (Sandbox Code Playgroud)
not None
因此是反布尔'值' None
.在布尔上下文中None
是false:
>>> bool(None)
False
Run Code Online (Sandbox Code Playgroud)
所以not None
是布尔True
.
两者None
并True
有对象了,而且都有一个内存地址(该值id()
返回CPython的Python实现):
>>> id(True)
4440103488
>>> id(not None)
4440103488
>>> id(None)
4440184448
Run Code Online (Sandbox Code Playgroud)
is
测试两个引用是否指向同一个对象 ; 如果某个东西是同一个对象,它也会有相同的东西id()
.is
返回一个布尔值,True
或False
.
is not
是is
运算符的反转.它相当于not (op1 is op2)
一个运营商.它不应该在op1 is (not op2)
这里阅读:
>>> 1 is not None # is 1 a different object from None?
True
>>> 1 is (not None) # is 1 the same object as True?
False
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2710 次 |
最近记录: |