我遇到了我认为是一个错误,我正在寻找确认或我不明白这个方法是如何工作的.
这是我的基本输出:
(Pdb) x = 'KEY_K' (Pdb) x.lstrip('K') 'EY_K' (Pdb) x.lstrip('KE') 'Y_K' (Pdb) x.lstrip('KEY') '_K' (Pdb) x.lstrip('KEY_') '' (Pdb) import sys (Pdb) sys.version '2.7.11 (default, Dec 5 2015, 14:44:47) \n[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.1.76)]'
我的理解是,该示例中的最终'lstrip'应该返回'K',但事实并非如此.有谁知道为什么?
该lstrip()
函数的行为与您的想法完全不同.从字符串左侧x.lstrip(argument)
删除任何字符,直到它到达不在的字符.argument
x
argument
因此'KEY_K'.lstrip('KEY_')
产生''
,因为最后一个字符K
,是KEY_
.
它在文档中是正确的:
lstrip(...)S.lstrip([chars]) - > string或unicode
返回字符串S的副本,删除前导空格.如果给出了chars而不是None,则删除chars中的字符.如果chars是unicode,则S将在剥离之前转换为unicode
'K'
是的'KEY_'
,这就是你的最后一个例子返回的原因''
.
请注意,'K'
如果前面有不在的字符,则不会被删除'KEY_'
:
>>> 'KEY_xK'.lstrip('KEY_') 'xK'
lstrip的第二个参数是将要删除的字符集。如果需要删除子字符串,则可以使用:
if x.startswith('KEY_'): x = x.replace('KEY_', '', 1)