遵守以下交互式会话:今天这个意外空字符串字符串
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
方法如何处理空字符串的结果?如果任何人有任何见解,或者可以指示我对这种行为的解释/描述的方向,那就太棒了。