ele*_*han 5 python string python-2.7
观察以下交互式会话:
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
Run Code Online (Sandbox Code Playgroud)
我今天发现了这一点,这对我来说有点令人困惑和惊讶。
我喜欢学习有关Python这样的东西,但是似乎这可能会导致一些令人困惑的陷阱。例如,如果空字符串中传递作为一个变量,只是碰巧是一个空字符串,你可以用一些令人惊讶的结果而告终。该行为似乎也有些不一致,因为基于上面的交互式会话,我认为以下内容将生成字符串中所有字符的列表(类似于JavaScript行为)。相反,您得到一个错误:
In [4]: s.split('')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-4-c31bd2432bc1> in <module>()
----> 1 s.split('')
ValueError: empty separator
Run Code Online (Sandbox Code Playgroud)
此外,这会导致一些看似矛盾的行为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
Run Code Online (Sandbox Code Playgroud)
通过尝试各种字符串方法,您可以找到更多类似的奇怪示例。
我的问题是,为什么空字符串会这样?还是这是str
方法处理空字符串的结果?如果任何人有任何见解,或可以向我指出这种行为的解释/说明,那就太好了。
Python字符串遵循以下原则:空字符串是其他所有字符串的子集。此外,python字符串也是字节字符串的串联,这意味着字符串由夹在空字符串之间的字节组成。您可以通过以下示例看到这一点:
>>>'a'.count('')
2
>>>'aa'.count('')
3
>>>'string'.count('')
7
Run Code Online (Sandbox Code Playgroud)
所以'a'
必须如此''+'a'+''
,而且'aa'
必须如此''+'a'+''+'a'+''
。
当您检查时'a'.startswith('')
,它会看到字符串'a'从技术上说是一个空字符串。相同'a'.endswith('')
。但是,当您检查时'a'.startswith('a')
,它将忽略空字符串,并查看第一个字节。
归档时间: |
|
查看次数: |
111 次 |
最近记录: |