c++string 加引号_Python 标准库学习 --- string

52a7552fa1f822546088764e1adc0158.png

61a97ffe323410df5971b748c2bad883.png

导入模块

# 导入 string 模块
import string

3bf18e4164f8f4243f17486f630c04c3.png
>>> s = 'my name is python'
>>> capwords(s)
'My Name Is Python'

>>> s = 'my-name-is-python'
>>> capwords(s,'-')
'My-Name-Is-Python'

81c0dcde93003bad7bfcc84ef553bc4c.png
def capwords1(s:str, seq:str=None)->str:
    return (seq or ' ').join(map(str.capitalize, s.split(seq)))


from operator import methodcaller

def capwords2(s:str, seq:str=None)->str:
    return (seq or ' ').join(map(methodcaller('capitalize'), s.split(seq)))

我们再和标准实现比较性能,我是在 ipython 上测试的:

text = "your time is limted, so don't waste it living someone else's lives" * 10000
%timeit capwords(text)
24.9 ms ± 588 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit capwords1(text)
22.1 ms ± 721 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit capwords2(text)
28.4 ms ± 3.38 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

f66b7c355961fc467480a5899193243b.png

779d6ccaccd1d3883722b7842b2551b3.png

substitue 的参数可以是字典:

57f9b8b22128b4513d2f3d42f6a739c1.png

还可以是关键字参数:

bd76d38def97b7b824afaab9d49be36a.png

关键字错误,解释器会报 KeyError:

5311168f36ab298c9068ff401f55bb04.png

这时候,我们可以使用 template 提供的另外一个方法 safe_subsitute 来防止编译器报错。当 safe_substitute 方法没有找到相应的关键字,会原封不动地返回标识符。

0b8f21e44bd4042bede0ff40710b6fcc.png

Template 有四个类属性,其中 delimiter 为分隔符,默认为 $ ,后面接标识符。通过重写 delimiter,我们可以支持 % 等符号替换。类属性 idpattern 为标识符匹配规则,类属性 flags 表示忽略大小写。

b4ee804e229683d7c3edbe6254b168e1.png

比如说,我们可以重写类属性 delimiter 和 idpattern。

aea1f7a8e5592e82711d0d24dddf0045.png

上面我们自定义了一个类,继承自 string.Template,并重写了 delimiter 和 idpattern 类属性。

f4803551268be0b67a304fe5155f2fdb.png

我们可以看到,分隔符已经换成了百分号,而标识符必须符合 _字母_字母的形式,否则会提示 valueError。

我们还可以从源码中学到一些技巧:

a6aec6ee7c9bd6f2fcee671ebc8a8ed9.png

*args 接受一个字典, kws 接受关键字参数,Chainmap 函数将多个映射连接起来,就可以查找 args 和 kws 中的关键字。

以上就是我学习 Python 标准库的思考,还请大家多多转发支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值