Python拼接字符串的7种⽅法
python拼接字符串⼀般有以下⼏种⽅法:
1,通过(%)操作符拼接
print('%s %s' % ('Hello', 'world'))
>>> Hello world
2,直接通过(+)操作符拼接
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!
使⽤这种⽅式进⾏字符串连接的操作效率低下,因为python中使⽤ + 拼接两个字符串时会⽣成⼀个新的字符串,⽣成新的字符串就需要重新申请内存,当拼接字符串较多时⾃然会影响
效率。
这种⽅式最常⽤、直观、易懂,是⼊门级的实现⽅式。但是,它也存在两处让⼈容易犯错的地⽅。
⾸先,新⼊门编程的同学容易犯错,他们不知道字符串是不可变类型,新的字符串会独占⼀块新的内存,⽽原来的字符串保持不变。上例中,拼接前有两段字符串,拼接后实际有三段字符串。
其次,⼀些有经验的⽼程序员也容易犯错,他们以为当拼接次数不超过3时,使⽤+号连接符就会⽐其它⽅式快(ps:不少Python教程都是如此建议),但这没有任何合理根据。
事实上,在拼接短的字⾯值时,由于CPython中的常数折叠(constant folding)功能,这些字⾯值会被转换成更短的形式,例如'a'+'b'+'c'被转换成'abc','hello'+'world'也会被转换成'hello world'。这种转换是在编译期完成的,⽽到了运⾏期时就不会再常数折叠优化有⼀个限度,它要求拼接结果的长度不超过20。所以,当拼接的最终字符串长度不超过20时,+号操作符的⽅式,会⽐后⾯提到的join等⽅式快得多,这与+号的使⽤次数⽆关。
题外话:你是否觉得20这个数字很熟悉呢?没错,我们之前在《Python中的“特权种族”是什么?》中提到过,字符串类的特权种族也是以20为限。当时也有⼀个例⼦,展⽰了编译期和运⾏期的区别,建议你去回看。
⼩知识
3,join()拼接⽅式
join() ⽅法⽤于将序列中的元素以指定的字符连接⽣成⼀个新的字符串
strlist=['Hello',' ','World','!']
>>>print(''.join(strlist))
str对象⾃带的join()⽅法,接受⼀个序列参数,可以实现拼接。拼接时,元素若不是字符串,需要先转换⼀下。可以看出,这种⽅法⽐较适⽤于连接序列对象中(例如列表)
的元素,并设置统⼀的间隔符。
当拼接长度超过20时,这种⽅式基本上是⾸选。不过,它的缺点就是,不适合进⾏零散⽚段的、不处于序列集合的元素拼接。
这种⽅式⼀般常使⽤在将集合转化为字符串,”.join()其中”可以是空字符,也可以是任意其他字符,当是任意其他字符时,集合中字符串会被该字符隔开,例如:
s trlist=['Hello',' ','World','!']
>>>print(','.join(strlist))
4,format()拼接⽅式
s='{} {}!'.format('Hello','World')
>>>print(s)
这种⽅式使⽤花括号{}做占位符,在format⽅法中再转⼊实际的拼接值。与%号拼接⽅式基本⼀致,特别注意{}的数量要和format⽅法参数数量⼀致,否则会报错
还有⼀种可以使⽤key-value的⽅式,直观可读,不容易出错次序
str1 = 'Hello {0}! My name is {1}.'.format('World', 'Jack')
str2 = 'Hello {name1}! My name is {name2}.'.format(name1='World',name2='Jack')
print(str1)
>>>Hello World! My name is Jack.
print(str2)
>>>Hello World! My name is Jack.
5,() 类似元组⽅式
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类型。括号()
内要求元素是真实字符串,不能混⽤变量
多⾏拼接
s = (
'Hello'
' '
'World'
'!'
)
print(s)
>>>Hello World!
6,通过string模块中的Template对象拼接
from string import Template
s = Template('${s1} ${s2}!')
print(s.safe_substitute(s1='Hello',s2='World'))
>>>Hello World!
Template的实现⽅式是⾸先通过Template初始化⼀个字符串。这些字符串中包含了⼀个个key。通过调⽤substitute或safe_subsititute,将key值与⽅法中传递过来的参数对应上,从⽽实现在指定的位置导⼊字符串。这种⽅式的好处是不需要担⼼参数不⼀致引发异常,如:
from string import Template
s = Template('${s1} ${s2} ${s3}!')
print(s.safe_substitute(s1='Hello',s2='World'))
>>>Hello World ${s3}!
7,通过F-strings拼接
在python3.6.2版本中,PEP 498 提出⼀种新型字符串格式化机制,被称为“字符串插值”(Literal String Interpolation,字⾯字符串插值)或者更常见的⼀种称呼是**F-strings,**F-strings提供了⼀种明确且⽅便的⽅式将python表达式嵌⼊到字符串中来进⾏格式化:
s1='Hello'
s2='World'
print(f'{s1} {s2}!')
字符串长度怎么数python>>>Hello World!
在F-strings中我们也可以执⾏函数:
def power(x):
return x*x
x=4
print(f'{x} * {x} = {power(x)}')
>>>4 * 4 = 16
F-strings这种⽅式的运⾏速度很快,⽐%-string和str.format()这两种格式化⽅法都快得多。
总结
格式化类:%、format()、template
拼接类:+、()、join()
插值类:f-string
当要处理字符串列表等序列结构时,采⽤join()⽅式;拼接长度不超过20时,选⽤+号操作符⽅式;长度超过20的情况,⾼版本选⽤f-string,低版本时看情况使⽤format()或join()⽅式。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论