Python开发者必学:七种高效拼接字符串的方法

(为Python开发者加星,提高你的Python技能)

Python开发者必学:七种高效拼接字符串的方法

作者:豌豆花下的猫(本文由作者投稿,见文末介绍)

我忘记在哪里看到一个编程大师取笑他了。他说程序员每天只做两件事,其中之一就是处理字符串。相信很多同学都会有同样的感受。

几乎在所有编程语言中,字符串都被列为最基本、不可或缺的数据类型。拼接字符串是一项必备技能。今天,我将和大家一起学习Python中拼接字符串的七种方法。

1.C语言中的%方法

print('%s %s' % ('Hello', 'world'))
>>> Hello world

% 符号格式化字符串的方式继承自古老的 C 语言,在许多编程语言中都有类似的实现。上例中的%s是占位符,仅代表字符串,并不是拼接的实际内容。实际的拼接内容放在元组中单独的%号后面。

类似的占位符还有:%d(代表整数)、%f(代表浮点数)、%x(代表十六进制数)等等。 %占位符既是这种拼接方式的一个特点,也是一个限制,因为每个占位符都有特定的含义,实际使用起来比较麻烦。

2.format()拼接方法

# 简洁版
s1 = 'Hello {}! My name is {}.'.format('World', 'Python猫')
print(s1)
>>>Hello World! My name is Python猫.

# 对号入座版
s2 = 'Hello {0}! My name is {1}.'.format('World', 'Python猫')
s3 = 'Hello {name1}! My name is {name2}.'.format(name1='World', name2='Python猫')
print(s2)
>>>Hello World! My name is Python猫.
print(s3)
>>>Hello World! My name is Python猫.

该方法使用大括号{}作为占位符,然后在format方法中传递实际的拼接值。不难看出,它实际上是对%符号拼接方法的改进。该方法是在Python 2.6中引入的。

在上面的例子中,简洁版本的花括号中没有任何内容。缺点是很容易搞错顺序。签入版本主要有两种,一种是传入序列号,另一种是使用key-value方式。实战中,我们推荐后一种方法,不会造成计数顺序错误,更直观、可读性更好。

3.()与元组方法类似

s_tuple = ('Hello', ' ', 'world')
s_like_tuple = ('Hello' ' ' 'world')

print(s_tuple) 
>>>('Hello', ' ', 'world')
print(s_like_tuple) 
>>>Hello world

type(s_like_tuple) >>>str

请注意,上面示例中的 s_like_tuple 不是元组,因为元素之间没有逗号分隔符。这些元素可以用空格分隔,也可以不用空格分隔。使用type()检查发现是str类型。我没有查出这其中的原因。我猜想()括号里的内容可能是Python优化过的。

这种方法看起来很快,但是要求括号()中的元素是真实的字符串,并且变量不能混合,所以不够灵活。

# 多元素时,不支持有变量
str_1 = 'Hello'
str_2 = (str_1 'world')
>>> SyntaxError: invalid syntax
str_3 = (str_1 str_1)
>>> SyntaxError: invalid syntax
# 但是下面写法不会报错
str_4 = (str_1)

4.面向对象的模板拼接

from string import Template
s = Template('${s1} ${s2}!') 
print(s.safe_substitute(s1='Hello',s2='world')) 
>>> Hello world!

老实说,我不喜欢这个实现。有一股浓浓的被面向对象思想毒害的恶臭。

没什么好说的。

5.常用+符号方法

str_1 = 'Hello world! ' 
str_2 = 'My name is Python猫.'
print(str_1 + str_2)
>>>Hello world! My name is Python猫.
print(str_1)
>>>Hello world! 

这种方法最常用、直观、容易理解,是入门级的实现方法。然而,有两个地方很容易犯错误。

首先,刚接触编程的同学很容易犯错误。他们不知道字符串是不可变类型。新字符串将独占新的内存,而原始字符串保持不变。上例中,拼接前有两个串段,但拼接后实际上有三个串段。

其次,一些经验丰富的程序员也容易犯错误。他们认为当拼接数量不超过3时,使用+号连接器会比其他方法更快(ps:很多Python教程都推荐这样做),但事实并非如此。任何合理的依据。

事实上,在拼接短文字值时,由于CPython中的常量折叠功能,这些文字值会被转换为更短的形式,例如'a'+'b'+'c'被转换为'abc' ', 'hello'+'world' 也会被转换为 'hello world'。这种转换是在编译时完成的,运行时不会发生拼接操作,从而加快了整体计算速度。

常量折叠优化有一个限制,要求拼接结果的长度不超过20。因此,当最终拼接的字符串长度不超过20时,+运算符方法会比后面提到的join方法,和+号的使用次数无关。

6. join()拼接方法

str_list = ['Hello', 'world']
str_join1 = ' '.join(str_list)
str_join2 = '-'.join(str_list)
print(str_join1) >>>Hello world
print(str_join2) >>>Hello-world

str对象自带的join()方法接受一个序列参数,可以进行拼接。拼接时,如果元素不是字符串,需要先进行转换。可见,这种方法比较适合连接序列对象(如列表)中的元素并设置统一分隔符。

当拼接长度超过20时,基本上首选此方法。但它的缺点是不适合拼接不在序列集中的碎片元素。

7.f弦法

name = 'world'
myname = 'python_cat'
words = f'Hello {name}. My name is {myname}.'
print(words)
>>> Hello world. My name is python_cat.

f-string方法来自PEP 498(Literal String Interpolation,文字字符串插值),从Python 3.6版本开始引入。其特点是在字符串前添加f标记,并在字符串中间使用大括号{}将其他字符串变量包裹起来。

该方法在可读性方面杀死了 format() 方法。在处理长字符串的拼接时,速度与join()方法相当。

尽管如此,这种方法不如其他一些编程语言优雅,因为它引入了 f 标志。其他一些编程语言可以更简洁,比如shell:

name="world"
myname="python_cat"
words="Hello ${name}. My name is ${myname}."
echo $words
>>>Hello world. My name is python_cat.

综上所述,我们前面提到的“字符串拼接”其实是从结果中理解的。如果从实现原理的角度来划分,我们可以将这些方法分为三类:

格式化类:%、format()、模板

拼接类:+、()、join()

插值类:f-string

处理字符串列表等序列结构时,使用join()方法;当拼接长度不超过20时,使用+运算符方法;当长度超过20时,高版本使用f-string,低版本根据情况使用f-string。 format() 或 join() 方法。

附上几个相关的 PEP 链接:

【本文作者】

豌豆花下的猫:兼具极客思维和人文情怀的985大学毕业生。个人公众号Python猫,专注于Python技术、数据科学和深度学习。

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

26阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读