我有一个Python程序,其中两个变量设置为该值'public'.在条件表达式中,我的比较var1 is var2失败了,但是如果我将其更改为var1 == var2它则返回True.
现在,如果我打开我的Python解释器并进行相同的"是"比较,它就会成功.
>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
>>> timeit.timeit("'x' in ('x',)")
0.04869917374131205
>>> timeit.timeit("'x' == 'x'")
0.06144205736110564
Run Code Online (Sandbox Code Playgroud)
也适用于具有多个元素的元组,两个版本似乎线性增长:
>>> timeit.timeit("'x' in ('x', 'y')")
0.04866674801541748
>>> timeit.timeit("'x' == 'x' or 'x' == 'y'")
0.06565782838087131
>>> timeit.timeit("'x' in ('y', 'x')")
0.08975995576448526
>>> timeit.timeit("'x' == 'y' or 'x' == 'y'")
0.12992391047427532
Run Code Online (Sandbox Code Playgroud)
基于此,我认为我应该完全开始使用in到处而不是==!
是否优先做:
if x is y:
return True
Run Code Online (Sandbox Code Playgroud)
要么
if x == y
return True
Run Code Online (Sandbox Code Playgroud)
同样的事情是"不是"
我注意到我可以使用==运算符来比较所有本机数据类型(整数,字符串,布尔值,浮点数等)以及包含本机数据类型的列表,元组,集和字典.在这些情况下,==操作员检查两个对象是否相等.但在其他一些情况下(尝试比较我创建的类的实例),==运算符只检查两个变量是否引用相同的对象(因此在这些情况下,==运算符等同于is运算符)
我的问题是:==运营商什么时候做的不仅仅是比较身份?
编辑:我正在使用Python 3