实际案例:
在设计某网络程序时,我们自定义了一个基于UDP的网络协议,按照固定次序向服务器传递一系列参数:
hwDetect "<0112>"
gxDepthBits "<32>"
gxResolution "<1024x768>"
gxRefresh "<60>"
fullAlpha "<1>"
lodDist "<100.0>"
DistCull "<500.0>"
在程序中我们将各个参数按次序收集到列表中:
["<0112>", "<32>", "<1024x768>", "<60>", "<1>", "<100.0>", "<500.0>"]
最终我们要把各个参数拼接成一个数据报进行发送:
"<0112><32><1024x768><60><1><100.0><500.0>"
解决方案:
方法1:迭代列表,连续使用'+' *** 作依次拼接每一个字符串。
方法2:使用str.join()方法,更加快速的拼接列表中所有字符串。
2、代码演示s1 = 'abcdef'
s2 = '123456'
# 使用+拼接字符串,本质上是运算符重载,_add__内置方法
print(s1 + s2)
print(str.__add__(s1, s2))
# 字符串大于等于比较,本质上调用的是__gt__方法
print(s1 > s2)
print(str.__gt__(s1, s2))
pl = ["<0112>", "<32>", "<1024x768>", "<60>", "<1>", "<100.0>", "<500.0>"]
# 方法1:使用+加号
'''
这种方法存在巨大的浪费,每次拼接都有一个临时的字符串用过以后就被丢弃,
这样也就意味着大量字符串拷贝和对象的释放,每次这种临时结果不用了,
它就被解释器释放掉了,如果字符串特别长这样开销就会巨大。
'''
s = ''
for p in pl:
s += p
# 打印s的变化过程
print(s)
# 方法2(推荐):str.join方法
'''
str.join方法介绍:
S.join(iterable) -> string
Example: '.'.join(['ab', 'pq', 'rs']) -> 'ab.pq.rs'
以什么进行连接这个符号就是分隔符,如上面用点(.)进行连接字符串
'''
# 以空字符进行连接
print(''.join(['abc', '123', 'xyz']))
# 以空字符去join列表中的字符串,就不存在临时变量的浪费
print(''.join(pl))
# l列表包含字符串和数字,拼接l中的每项成一个字符串
l = ['abc', 123, 45, 'xyz']
# 使用列表解析也会增加开销
ls = ''.join([str(x) for x in l])
print(ls)
# 使用生成器表达式,将[]变成了(),它的开销相比于列表小的多
print(''.join((str(x) for x in l)))
# 作为参数的时候,可以不用圆括号
print(''.join(str(x) for x in l))
'''
拼接项很少的时候,可以使用+加号这样很简洁;
拼接项很多的情况下使用str.join方法避免浪费。
'''
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)