前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >有意思的 lstrip 和 removeprefix(Python 3.9)

有意思的 lstrip 和 removeprefix(Python 3.9)

作者头像
Alan Lee
发布2020-05-26 14:43:25
9720
发布2020-05-26 14:43:25
举报
文章被收录于专栏:Small CodeSmall Code

废话不多说,上正文。

对比

Python 3.9 的新特性中,有两个新的字符串方法:str.removeprefix(prefix, /)str.removesuffix(suffix, /),前者是去除前缀,后者是去除后缀。

ěi~,是不是感觉似曾相识,这不就是 lstrip()rstrip() 的功能吗?还真不是。

来看一个对比:

代码语言:javascript
复制
>>> '今天天气不错'.removeprefix('今天')
'天气不错'
>>> '今天天气不错'.lstrip('今天')
'气不错'

?是不是挺奇怪,我估计可能坑了很多人。下面来看下为什么 lstrip() 会出现这样的结果。

Why

首先需要说明的是,lstrip([chars]) 这样的行为,是一个 feature,不是一个 bug。

看下文档是怎么说的:

Return a copy of the string with leading characters removed. The chars argument is a string specifying the set of characters to be removed. The chars argument is not a prefix; rather, all combinations of its values are stripped:

也就是说,其参数 chars 虽然是一个字符串,但不是直接去除字串形式的 chars,而是在从左到右遍历原字符串,去除在 chars 中的字符,直到遇到第一个不在 cahrs 中的字符为止,即类似如下实现:

代码语言:javascript
复制
def lstrip(s, chars):
    chars = set(chars)
    for i in s:
        if i in chars:
            s = s.replace(i, '')
        else:
            break
    return s
>>> lstrip('今天天气不错', '今天')
'气不错'

有时候可能这并不是我们想要的情况(可能大多数情况都不是),我们想要的是可能是下面这样的效果:

代码语言:javascript
复制
def lstrip(s, chars):
    if s.startswith(chars):
        return s[len(chars):]
    return s
>>> lstrip('今天天气不错', '今天天气')
'天气不错'

而 Python 3.9,就直接内置了这个方法,命名为 removeprefix(),后面如果我们想要去除前缀而不是前缀所包括的那些字符的时候,就可以直接用了:

代码语言:javascript
复制
>>> '今天天气不错'.removeprefix('今天')
'天气不错'

Reference

END

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 对比
  • Why
  • Reference
  • END
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档