when someone abandons you,it is him that gets loss because he lost someone who truly loves him but you just lost one who doesn’t love you.
无论啥语言,总是免不了拼接字符串的。从今天起,f-string 方式作为首选方案
几个字符串相关的小问题:
{} 要怎么作为字符串输入?
1 | print(f'{{}}') |
字符串前面加上 r 的作用
在 string 前面加上 r,是为了告诉编译器这个 string 是个 raw string,不要转意 backslash '' 。 例如,\n 在 raw string 中,是两个字符,\ 和 n, 而不会转意为换行符。由于正则表达式和 \ 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上 r
字符串拼接方式:
来自 C 语言的 % 方式
1 | print('%s %s' % ('Hello', 'world')) |
% 号格式化字符串的方式继承自古老的 C 语言,在很多编程语言都有类似的实现。上例的%s是一个占位符,它仅代表一段字符串,并不是拼接的实际内容。实际的拼接内容在一个单独的 % 号后面,放在一个元组里
类似的占位符还有:%d(代表一个整数)、%f(代表一个浮点数)、%x(代表一个16进制数),等等。% 占位符既是这种拼接方式的特点,同时也是其限制,因为每种占位符都有特定意义,实际使用起来太麻烦了
format() 拼接方式
1 | # 简洁版 |
这种方式使用花括号 {} 做占位符,在 format 方法中再转入实际的拼接值。这种方式在Python2.6中开始引入。上例中,简洁版的花括号中无内容,缺点是容易弄错次序。对号入座版主要有两种,一种传入序列号,一种则使用 key-value 的方式。实际使用时更推荐后一种,既不会数错次序,又更直观可读
() 类似元组方式
1 | s_tuple = ('Hello', ' ', 'world') |
注意,上例中 s_like_tuple 并不是一个元组,因为元素间没有逗号分隔符,这些元素间可以用空格间隔,也可以不要空格。使用 type() 查看,发现它就是一个 str 类型
这种方式看起来很快捷,但是,括号 () 内要求元素是真实字符串,不能混用变量,所以不够灵活
1 | # 多元素时,不支持有变量 |
面向对象模板拼接
1 | from string import Template |
常用的 + 号方式
1 | str_1 = 'Hello world! ' |
join() 拼接方式
1 | str_list = ['Hello', 'world'] |
str 对象自带的 join() 方法,接受一个序列参数,可以实现拼接。拼接时,元素若不是字符串,需要先转换一下。可以看出,这种方法比较适用于连接序列对象中(例如列表)的元素,并设置统一的间隔符
当拼接长度超过20时,这种方式基本上是首选。不过,它的缺点就是,不适合进行零散片段的、不处于序列集合的元素拼接
f-string 方式
1 | name = 'world' |
f-string 方式出自 PEP 498(Literal String Interpolation,字面字符串插值),从Python3.6 版本引入。其特点是在字符串前加 f 标识,字符串中间则用花括号 {} 包裹其它字符串变量
这种方式在可读性上秒杀 format() 方式,处理长字符串的拼接时,速度与 join() 方法相当
be slow to promise and quick to perform.