• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

详解Python拼接字符串的七种方式

python 搞java代码 3年前 (2022-06-26) 31次浏览 已收录 0个评论

忘了在哪看到一位编程大牛调侃,他说程序员每天就做两件事,其中之一就是解决字符串。置信不少同学会有同感。

简直任何一种编程语言,都把字符串列为最根底和不可或缺的数据类型。而拼接字符串是必备的一种技能。明天,我跟大家一起来学习Python拼接字符串的七种形式。

1、来自C语言的%形式

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

%号格式化字符串的形式继承自古老的C语言,这在很多编程语言都有相似的实现。上例的%s是一个占位符,它仅代表一段字符串,并不是拼接的理论内容。理论的拼接内容在一个独自的%号前面,放在一个元组里。

相似的占位符还有:%d(代表一个整数)、%f(代表一个浮点数)、%x(代表一个16进制数),等等。%占位符既是这种拼接形式的特点,同时也是其限度,因为每种占位符都有特定意义,理论应用起来太麻烦了。

2、format()拼接形式

# 简洁版
s1 = 'Hello {}! My name is {}.'.format('World', '搞代码网')
print(s1)
>>>Hello World! My name is 搞代码网.

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

这种形式应用花括号{}做占位符,在format办法中再转入理论的拼接值。容易看出,它实际上是对%号拼接形式的改良。这种形式在Python2.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 搞代码网.'
print(str_1 + str_2)
>>>Hello world! My name is 搞代码网.
print(str_1)
>>>Hello world! 

这种形式最罕用、直观、易懂,是入门级的实现形式。然而,它也存在两处让人容易犯错的中央。

首先,新入门编程的同学容易犯错,他们不晓得字符串是不可变类型,新的字符串会独占一块新的内存,而原来的字符串放弃不变。上例中,拼接前有两段字符串,拼接后理论有三段字符串。

其次,一些有教训的老程序员也容易犯错,他们认为当拼接次数不超过3时,应用+号连接符就会比其它形式快(ps:不少Python教程都是如此倡议),但这没有任何正当依据。

事实上,在拼接短的字面值时,因为CPython中的 常数折叠 (constant folding)性能,这些字面值会被转换成更短的模式,例如’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-string形式

name = 'world'
myname = '搞代码网'
words = f'Hello {name}. My name is {myname}.'
print(words)
>>> Hello world. My name is 搞代码网.

f-string形式出自PEP 498(Literal String Interpolation,字面字符串插值),从Python3.6版本引入。其特点是在字符串前加 f 标识,字符串两头则用花括号{}包裹其它字符串变量。

这种形式在可读性上秒杀format()形式,解决长字符串的拼接时,速度与join()办法相当。

尽管如此,这种形式与其它某些编程语言相比,还是欠优雅,因为它引入了一个 f 标识。而其它某些程序语言能够更简练,比方shell:

name="world"
myname="搞代码网t"
words="Hello ${name}. My name is ${myname}."
echo $words
>>>Hello world. My name is 搞代码网.

总结一下,咱们后面说的“字符串拼接”,其实是从后果上了解。若从实现原理上划分的话,咱们能够将这些办法划分出三种类型:

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

当要解决字符串列表等序列构造时,采纳join()形式;拼接长度不超过20时,选用+号操作符形式;长度超过20的状况,高版本选用f-string,低版本时看状况应用format()或join()形式。

以上就是本次分享的所有内容,想要理解更多 python 常识欢送返回公众号:Python 编程学习圈 ,发送 “J” 即可收费获取,每日干货分享


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解Python拼接字符串的七种方式

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址