正如所有的Python程序員都知道,你應該使用的==
代替is
來比較兩個字符串是否相等。但是,實際上在Python 2.6.2中有哪些情況下(s is "")
和(s == "")
會給出不同的結果?可以(s是「」)和(s ==「」)在Python 2.6.2中給出不同的結果嗎?
我最近碰到,在代碼審查中使用(s is "")
代碼,並同時指出,這是不正確的,我想給這如何可能失敗的例子。但儘可能地嘗試,我不能構建兩個具有不同身份的空字符串。似乎Python的實現必須在許多常見操作中對空字符串進行特殊處理。例如:
>>> a = ""
>>> b = "abc"[ 2:2 ]
>>> c = ''.join([])
>>> d = re.match('()', 'abc').group(1)
>>> e = a + b + c + d
>>> a is b is c is d is e
True
然而,this question表明,有是案件其中(s is "")
和(s == "")
可以是不同的。任何人都可以給我一個例子嗎?
然而,這測試了兩種不同類型的字符串對象'str'和'unicode'。當s的類型相同時,或者如果您使用沒有顯式'unicode'對象的Python 3,問題仍然存在。 – poke 2010-07-02 11:53:55
@poke,這個問題明確地集中在Python 2.6.2而不是Python 3上。 – zoli2k 2010-07-02 11:56:37
沒錯,但它是一個重要的區別,這可能不是最好的方法。那個測試實際上是指那個代碼的意思?那'過去的事情相當於一個空的字符串',或者'過去的事物是str類型和空的'? Imo如果是後者,那麼明確的類型測試對於未來的維護者和用戶來說會更友好。 – pycruft 2010-07-02 11:57:27