我有一个Python程序,其中两个变量设置为该值'public'.在条件表达式中,我的比较var1 is var2失败了,但是如果我将其更改为var1 == var2它则返回True.
现在,如果我打开我的Python解释器并进行相同的"是"比较,它就会成功.
>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
我注意到我写的一个Python脚本是松散的,并将其追溯到一个无限循环,循环条件是while line is not ''.在调试器中运行它,事实证明该行''.当我改为!=''而不是is not '',它工作得很好.
另外,通常认为默认情况下使用'=='会更好,即使在比较int或Boolean值时也是如此?我一直喜欢使用'是'因为我发现它更美观和pythonic(这就是我陷入这个陷阱...),但我想知道它是否只是为了保留当你关心找到两个具有相同id的对象.
虽然这个问题在实践中没有任何实际用途,但我很好奇Python如何进行字符串实习.我注意到以下内容.
>> "string" is "string"
>> True
Run Code Online (Sandbox Code Playgroud)
这是我所期待的.
你也可以这样做.
>> "strin"+"g" is "string"
>> True
Run Code Online (Sandbox Code Playgroud)
这非常聪明!
但你不能这样做.
>> s1 = "strin"
>> s2 = "string"
>> s1+"g" is s2
>> False
Run Code Online (Sandbox Code Playgroud)
为什么Python不会评估s1+"g",意识到它是相同的s1并指向同一个地址?在最后一个块中实际发生了什么让它返回False?