pba*_*ski 41 python python-internals
为什么在Python中以这种方式进行评估:
>>> False is False is False
True
Run Code Online (Sandbox Code Playgroud)
但是当试用括号时,表现如预期的那样:
>>> (False is False) is False
False
Run Code Online (Sandbox Code Playgroud)
zeh*_*ard 65
像链接操作符a is b is c相当于a is b and b is c.
所以第一个例子是False is False and False is False,评估True and True哪个评估结果True
有括号导致一个评估的结果被下一个变量相比(如你说你期望的),所以(a is b) is c比较的结果a is b用c.
the*_*eye 26
引用Python官方文档,
形式上,如果
a,b,c,...,y,z是表达式并且op1,op2,...,opN是比较操作符,则a op1 b op2 c ... y opN z等同于a op1 b and b op2 c and ... y opN z,除了每个表达在评价最多一次.
所以,False is False is False被评估为
(False is False) and (False is False)
Run Code Online (Sandbox Code Playgroud)
第二个False is False表达式使用False原始表达式中的第二个表达式,它有效地转换为
True and True
Run Code Online (Sandbox Code Playgroud)
这就是第一个表达式评估的原因True.
但在第二个表达式中,评估顺序如下.
(False is False) is False
Run Code Online (Sandbox Code Playgroud)
这实际上是
True is False
Run Code Online (Sandbox Code Playgroud)
这就是结果的原因False.
Mat*_*ias 14
你的表达
False is False is False
Run Code Online (Sandbox Code Playgroud)
被视为
(False is False) and (False is False)
Run Code Online (Sandbox Code Playgroud)
所以你得到了
True and True
Run Code Online (Sandbox Code Playgroud)
并评估为True.
您也可以与其他运营商一起使用这种链接.
1 < x < 10
Run Code Online (Sandbox Code Playgroud)
我认为这False is False is False意味着(False is False) and (False is False),但(False is False) is False意味着:
>>> (False is False) is False
False
>>> a_true = (False is False)
>>> a_true
True
>>> a_true is False
False
Run Code Online (Sandbox Code Playgroud)
所以,你得到的结果.
| 归档时间: |
|
| 查看次数: |
3610 次 |
| 最近记录: |