我(可能是错误的)认为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 次 |
| 最近记录: |