遵守以下交互式會話:今天這個意外空字符串字符串
In [1]: s = 'emptiness'
In [2]: s.replace('', '*')
Out[2]: '*e*m*p*t*i*n*e*s*s*'
In [3]: s.count('')
Out[3]: 10
我發現,這是一個有點混亂和令人驚訝的我。
我喜歡學習類似Python的東西,但是這似乎會導致一些令人困惑的陷阱。例如,如果空字符串作爲變量傳入,並且只有發生了爲空字符串,那麼最終會出現一些令人驚訝的後果。這種行爲似乎也有點不一致,因爲基於上面的交互式會話,我認爲以下內容會產生字符串中所有字符的列表(類似於JavaScript行爲)。相反,你會得到一個錯誤:
In [4]: s.split('')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-4-c31bd2432bc1> in <module>()
----> 1 s.split('')
ValueError: empty separator
而且,這會導致一些看似矛盾的行爲與str.endswith()
和str.startswith()
:
In [5]: s.endswith('')
Out[5]: True
In [6]: s.endswith('s')
Out[6]: True
In [7]: s.startswith('')
Out[7]: True
In [8]: s.startswith('e')
Out[8]: True
各種string methods做實驗,你可以找到更多類似的奇怪的例子。
我的問題是爲什麼這樣做的空字符串的行爲?或者這是str
方法如何處理空字符串的結果?如果任何人有任何見解,或者可以指示我對這種行爲的解釋/描述的方向,那就太棒了。