您的位置:首页 > 编程语言 > Python开发

【Python学习】3.Python字符串拼接的八种方式

2020-04-22 08:15 886 查看

Python字符串拼接的八种方式

在很多情况下,都需要合并字符串。python有种拼接字符的方法,细分为三种类型:

格式化类:%、format()、template
拼接类:+、*、()、join()
插值类:f-string

(1)格式化类

- 使用占位符%

# 将字符串s1和s2使用占位符%拼接起来
s1 = 'hello'
s2 = 'world'
print('%s %s '%(s1, s2)) #%s是一个占位符,它仅仅只代表一段字符串,并不是实际的拼接内容,需要拼接的内容s1和s2放在在一个单独的%号后面,放在一个元组里
>>>hello world

%s是一个占位符,它仅仅只代表一段字符串,并不是实际的拼接内容,需要拼接的内容s1和s2放在在一个单独的%号后面,放在一个元组里,类似的占位符还有:%d(代表一个整数)、%f(代表一个浮点数)、%x(代表一个16进制数),等等。

占位符%s既可以表示字符串str,还可以表示整数int,浮点数float;
占位符%d既可以表示整数int,还可以表示浮点数float(去除整数部分);
占位符%f既可以表示浮点数float,还可以表示整数int(默认保留6位小数);

- format()方法

# 普通版
s1 = '一二{}四{}六!'.format('三', '五')
print(s1)
>>>一二三四五六!
# 编号清晰版
s2 = '一二{name1}四{name2}六'.format(name1='三', name2='五')
print(s2)
>>>一二三四五六

format方式使用花括号{}做占位符,在format方法中再转入实际的拼接值。它实际上是对%号拼接方式的改进。无需考虑拼接内容的类型。上例中,简洁版的花括号中无内容,缺点是容易弄错次序。编号版是在{}为凭借内容进行编号,更加清晰可读。
format()方法详细用例

- 面向对象模板拼接template
Python中Template是string中的一个类,可以将字符串的格式固定下来,重复利用。可以用于自动生成测试用例。要使用的话要在头部引入。

# 导入Template模块
from string import Template

用法很简单,先生成一个模板实例s,然后调用替换函数substitute()将模板中的两个地方替换掉。替换的内容是通过字典对调用的。

# 直接使用$
from string import Template
s = Template('$a,$b!')
print(s.substitute(a='Hello',b='world'))
>>> Hello,world!
# 使用${},使用这种方法时候,括号里的内容要和括号紧贴,不能有空格,否则会报错
from string import Template
s = Template('${a},${b}!')
print(s.substitute(a='Hello',b='world'))
>>> Hello,world!

当然在使用substitute()的时候,对应的关键字和值都要给出,不然会报错,使用safe_substitute()可以避免报错

# 使用safe_substitute()可以避免报错
from string import Template
s = Template('${a},${b}!')
print(s.safe_substitute(a='Hello')) # 没有给出b的值,但不会报错,而是吧${b}当作字符串打印出来
>>> Hello,${b}!

(2)拼接类

  • 使用 + 号拼接
    使用加号直接连接字符串,代码如下:
s1 = 'hello,'
s2 = 'world!'
print(s1 + s2) #直接将两个字符连接打印
>>>hello,world!

当拼接的最终字符串长度不超过20时,+号操作符的方式,会比后面提到的join()等方式快得多,这与+号的使用次数无关。

注意:加号两边必须是相同类型,例如若出现字符串+整形,系统就会报错。另外,字符串是不可变类型,新的字符串会独占一块新的内存,而原来的字符串保持不变。上例中,拼接前有两段字符串,拼接后实际有三段字符串。

  • 使用 * 号拼接

这种连接方式就是相当于 copy 字符串,可以重复拼接自身代码如下:

print('ab'*2) #将字符串复制两次
>>>abab

- join()方法
join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。

#str.join(sequence),sequence -- 要连接的元素序列。

str = '-' # 设置连接符
seq1 =('a', 'b', 'c') #定义一个序列,这个序列是一个元组
print(str.join(seq1))

>>>a-b-c
seq2 ='abc' #也可直接对字符串进行操作,字符串也是一个序列
print('-'.join(seq2))
>>>a-b-c

str对象自带的join()方法,接受一个序列参数(列表或元组),可以实现拼接。拼接时,元素若不是字符串,需要先转换一下。可以看出,这种方法比较适用于连接序列对象中(例如列表)的元素,并设置统一的间隔符。
当拼接长度超过20时,这种方式基本上是首选。不过,它的缺点就是,不适合进行零散片段的、不处于序列集合的元素拼接。

(3)插值类

- f-string方法
f-string是字符串前加“f”或者“F”,然后字符串内“{}”就有特殊意义了,里面填写变量名,运行时自动计算这个变量的值,代入字符串内输出。该方法不涉及格式化问题,就是在f-string中的大括号填写一句可执行的Python语句,运行时把它执行得到的值,替换这一个“{}”块。

# 简单使用
name = 'lilly'
print(f'Hello,my name is {name}')
>>>hello,my name is lilly
#表达式求值和函数调用
# 表达式求值
print(F'Hello,my age is {11+9}')
>>>Hello,my age is 20
# 函数调用
import math
print(f'The answer is {math.log(math.pi)}')

>>>'The answer is 1.1447298858494002'

f-string在功能方面不逊于传统的%-formatting语句和str.format()函数,同时性能又优于二者,且使用起来也更加简洁明了,因此对于Python3.6及以后的版本,推荐使用f-string进行字符串格式化。
当要处理字符串列表等序列结构时,采用join()方式;拼接长度不超过20时,选用+号操作符方式;长度超过20的情况,高版本选用f-string,低版本时看情况使用format()或join()方式。
关于字符串拼接,还得补充一个建议,即在复杂场景下,尽量避免使用以上几类原生方法,而应该使用外置的强大的处理库。比如在拼接 SQL 语句的时候,经常要根据不同的条件分支,来组装不同的查询语句,而且还得插入不同的变量值,所以当面临这种复杂的场景时,传统拼接方式只会加剧代码的复杂度、降低可读性和维护性。使用SQLAlchemy模块,将有效解决这个问题。

本文主要参考《python学习手册》Mark Lutz,Python猫公众号,作者豌豆花下猫。

  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
heyiyiya 发布了11 篇原创文章 · 获赞 8 · 访问量 657 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐