Python rstrip函数踩坑记录

系统 1537 0

问题背景

从许多中文的参考文献上,rstrip() 函数的功能被简单描述为 : 删除字符串末尾的指定字符(默认为空格) ,我的理解是,直接去掉末尾指定的字符序列,如我传入的是 d ,则会去掉末尾的字符 d (如果存在),如果传入了字符 ad ,则去掉末尾的字符 ad (如果存在),直到我们开发的服务遇到了一个非常奇怪的bug之后,下面是奇怪问题的复现过程:

            
              >>> s = 'hello_world'
>>> s.rstrip('d') # 去除末尾的字符d
'hello_worl'
>>> 
>>> s.rstrip('ld') # 去除末尾的字符 ld
'hello_wor'
>>> 
>>> s.rstrip('ad') # 去除末尾字符 ad
'hello_worl' # ??? 为什么 d 被去掉了?
>>> 

            
          

问题解决

在查了N多的中文参考资料之后,一直没找到出现此现象的原因,于是我拜读了一下python官方的文档:https://docs.python.org/2/library/string.html
官方文档的说明是:Return a copy of the string with trailing characters removed. If chars is omitted or None, whitespace characters are removed. If given and not None, chars must be a string; the characters in the string will be stripped from the end of the string this method is called on.
简单的翻译一下,其意思就是去掉字符串末尾的指定字符,如果传入的字符为空,则去掉字符串末尾的空格,但是我们忽略了重点内容:the characters in the string will be stripped from the end of the string this method is called on,这里面有两个 the string ,第一个 the string 指的是用户传入的字符串,如上面的 d ld ad ,而第二个 the string 指的是需要处理的string,这样理解之后,rstrip的功能就彻底明确了,其功能准确的描述就是:删除字符串末尾指定的字符中任意字符,如果为空,则删除字符串末尾的空格
提到了rstrip,就不得不提起lstrip,lstrip和rstrip功能类似,唯一的区别就是rstrip去掉的是字符串末尾的指定字符,而lstrip去掉的是字符开头的指定字符。

总结一下

rstrip和lstrip方法删除的不是传入的整个字符,而是以单个字符为单位删除,如果你传入了一段字符串,如果这段字符串中任何一个字符出现在需删除字符串的开头或末尾,则都将会被删除。如:

            
              >>> s = 'helloworlld'
>>> s.rstrip('ld')
'hellowor'

            
          

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论