字符串的高级玩法 - 交互式学Python | 莫烦Python

字符串的高级玩法

作者: 莫烦 编辑: 莫烦 2021-06-03

处理字符串很有意思的,一般的情况下,我们只需要打印出一段特定的话就好了, 但是还有些时候,这些话会应为场景的不同,方式的不同,参数的不同,里面的具体内容就会随之发生改变。 不管你是打印给自己看的,还是输出给别人看的,你都会使用这些方法。

而下面介绍的这些方法就是能让你释放劳动力的功能,让你更关注与编程本身,而不是处理那些繁杂的字符。

string

在这一节涉及到的功能:

%百分号模式

这个应该会算是你接触到最多的一种形式,因为它在很久以前的 Python 版本中就存在了。 下面还有 format,f 字符串都是类似的功能,只是 Python 给你提供了多样化的方式达成类似的目的。

你看,同样是输出一个可配置的字符串,我们就见到了两种不同的方式。而上面第二种,相对而言就算比较简单的,因为当字符串里面要传入的参数变多的时候, 第一种方式将会很混乱。

我们后面再说 % 后面那些标识符的含义,你现在就光看我们的模式,你觉得哪一种看起来比较舒服,比较好写呢?我认为是第二种,你还认为是第一种吗? 要不你自己手打一遍,体验一下~

而且当你要在这句话中塞入更多参数时,即使是第二种也有可能不太适合了,因为我都不记得他们的顺序是怎样的,我很容易就填错了。 那么能不能用字典一样的模式来填入数据呢?

因为用字典我就不用关心后面参数的顺序了,而且有的时候,我还可以重复利用字典里面的 key 做索引。

好了,上面我还卖了个关子,没告诉你们这个 % 后面跟着的字母是什么意思,我现在在下面列了一些比较常用的。

方式 意思
%d 整数
%i 整数
%f 小数
%s 字符

按照这些,我来举几个例子。

关于字符和数字类型,如果你在数字类型(%d,%f)里输入的是字符,它就报错了,不信你试试。 但是你在字符类型(%s)里输入的是数字,它却没有问题,你也可以试试。神不神奇!

还有一个比较常用的方式,就是当你使用小数的时候,你会发现 %f 可以打印出很长一串数字。有时候很占格子,我不喜欢,我可以让它短一点,输出固定长度的小数。

比较上面两种写法,如果你不需要看太多精度的话,你就浓缩一下就好,我觉得简约就是美。同样,下面还有四种对比, 让你看看我不光可以限制小数点后面的长度,也可以对小数点前面的长度做点手脚。

format功能更多

format 的方法是在 % 百分号之后发明的,我一般都比较喜欢用这种方法,因为我觉得它更加 Python。为什么这么说呢? 因为在我眼里,我会认为 format 更像是一个编辑字符串的功能,而非像百分号那样的固定搭配。 我们来对比一下 format 和百分号吧,他们能实现的功能差不多的。只是你可以按你的需求挑选一种你喜欢的方式。

从这里看出,简单的使用方式,就是我只用{}来占位,后面在 format 里按顺序放入值就好了,不用管这个值到底是什么类型。 其实除了这样的方式,format 还支持很多其他方式。比如我给 {} 里放一个数字,表示后面 format 里面的 index,这样我就能复用传入的值了。 这一招就比 百分号 模式要好一些。

除了按照 index 来传字符,我们也可以用字典模式。只要我在 {} 传入一个 key 的名字就好。这样子也是可以复用参数的,方便很多。

同样,我么也是可以在做一些手脚,让它在显示小数或数字时,有更丰富的控制。

对了,你迟早会遇到要在 {} 放入百分号的问题的,至少我在实际中,也遇到了要输入百分号的问题。

我在下面这个表里列一下我觉得你可能会用到的。除了表里这些常用的,还有更多方式,你可以去查一下。

方式 意思
:, 每 3 个 0 就用逗号隔开,比如 1,000
:b 该数字的二进制
:d 整数型
:f 小数模式
:% 百分比模式

f格式化字符串

这个是 Python 3.6 之后引入的一个功能,如果你是其他语言转过来学 Python 的,你可能在其他语言中有遇到过这种形式的字符串处理模式。 这就比百分号%和 format 更加方便易用了。因为你写的字更少了,用有限的生命写出更多的 code~

注意,在使用 f 模式的情况下,我们要在字符串开头加上一个 f。然后用 {} 圈出你的变量名,直接在 {} 引用变量。例子如下:

甚至你还可以在 {} 里做运算,比如下面这样:

不仅仅是节省了代码量,它同样还是保留了一些特殊写法,包括限制字符长度等。做法都和 % 还有 format 类似。

修改字符串

除了让你多样化拼接字符串,比如用 %format 或者 f 方式,我们还可以用一些字符串功能来处理文字的更多需求。

这些我就在下面列一个表告诉你一些常用的吧,还有些不常用的,你也很容易从网上搜到。

方式 意思
strip 去除两端的空白符
replace 替换字符
lower 全部做小写处理
upper 全部做大写处理
title 仅开头的字母大写
split 按要求分割
join 按要求合并
startswith 判断是否为某字段开头
endswith 判断是否为某字段结尾

下面我来介绍几个我觉得有必要介绍的,因为它很有趣。而且很多还可以和正则表达式配合着用。

剔除前后空白

替换文字

文字的大小写处理

拆散你,重组你

街头巷尾遇见你

总结

字符串绝对不是单一的文字,它是有生命的~ 有很多有趣的方法可以丰富你的字符串表达,这里介绍的技术 %formatf 模式,你肯定在使用Python某个阶段中会要用到。


降低知识传递的门槛

莫烦很常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛免费 奉献我的所学正是受这种态度的影响。 通过 【赞助莫烦】 能让我感到认同,我也更有理由坚持下去。