is there a time when the `is` operator can return false with two similar strings in Python?
我编辑了一些代码,让它看起来更容易理解,我想我应该把所有的
1 2 3 4 | Warnings... test.py:7: Using is |, may not always work Processing module test (test.py)... |
在我的一生中,我无法想象,如果我没有错的话,除非你开始冒险使用多字节字符编码、CJK字符等,否则
如果两个变量都指向相同的参照点,则Will check if values on both the sides are equal,but
1 2 3 4 5 | a ="aa" b ="aa" print a, b, id(a), id(b) print a == b print a is b |
机器输出
ZZU1
自从
1 2 3 4 5 | a ="aa" b ="aaa"[:2] print a, b, id(a), id(b) print a == b print a is b |
机器输出
1 2 3 | aa aa 139680667038464 139680667014248 True False |
尽管有同样的数据(平等),在记忆中,它们存储在不同的位置(不同的参考或两个不同的对象)。
从不使用EDOCX1&1
在CPYTHON中,所有单个字符串都是互相关联的,并且应该总是有相同字符串的相同标识(字符串)
这只是一个详细的执行情况,不应与之联系起来。
你可能想要检查两条弦乐的身份的地方也有,但你的用法不是其中之一。
1 2 3 4 5 6 7 8 | Python 2.7.2 (1.9+dfsg-1, Jun 19 2012, 23:23:45) [PyPy 1.9.0 with GCC 4.7.0] on linux2 Type"help","copyright","credits" or"license" for more information. And now for something completely different: ``"let's not be obscure, unless we really need to"'' >>>> a ="|" >>>> a is"|" False |
我把这个问题解释为"我实际用的是什么东西?"页:1
"是"检验是典型的,当一个缺陷名称为函数的论据是不存在的,你想知道是否给了函数什么东西。没有总是没有。如果他们给了0或[……]或",那么这些东西将被评定为一个错误的起点。
1 | False == 0 == bool('') == bool([]) == bool(None) |
Returns
1 | True |
如果你的函数的使用者想要函数运行的话,那么检查变量的书籍不会给你想要的行为。如果函数有一个有意提供的论据,则非行为如哨兵检查。这是当你指定变量为一个可变形的容器物体时特别有用的检查。
E.G.:
1 2 3 4 5 | def foo(fn_list=None): if fn_list is None: fn_list = [] fn_list.append('foo') return fn_list |
So
1 | a is b |
和检查一样
1 | id(a) == id(b) |
如果评估是真的,他们是同样的目标,因为他们都是在记忆中的同一个位置。当其他人指向外界时,不要利用平等检验,因为执行可能会变,而且无论如何,如果这是一个相同的目标,你就不在乎,无论两个项目是否等值。