案例
在设计某网络程序时,我们自定义了一个基于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)str1 + str2
(2)str.join()
代码
# str1 + str2 --------------------------------------
pl = ["<0112>", "<32>", "<1024x768>", "<60>", "<1>", "<100.0>", "<500.0>"]
s = ''
for p in pl:
s += p # 当字符串很长的时候,会造成内存开销和浪费
print(s)
# str.join() ------------------推荐----------------------
t = ';'.join(['abc', '123', 'xyz'])
print(t) # abc;123;xyz
t2 = ''.join(['abc', '123', 'xyz'])
print(t2) # abc123xyz
res = ''.join(pl)
print(res)
l = ['abc', 123, 34, 'xyz']
# res2 = ''.join(l)
# join方法处理的list,只能含有str类型的元素,如果有int类型,则会报错 ->
# TypeError: sequence item 1: expected str instance, int found
res2 = ''.join([str(x) for x in l]) # 列表解析式,会生成一个list,可能会造成存储开销
res3 = ''.join(str(x) for x in l) # 生成器对象 generator object 不会生成列表,开销小
print(res2, res3) # abc12334xyz