为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中连接字符串 - 最快的方法是什么

在 Python 中连接字符串 - 最快的方法是什么

Go
萧十郎 2021-11-16 09:40:35
我需要通过套接字发送图像,并且需要尽快完成。图像表示为 3d numpy 数组。发送的数据可以达到 500000 字节以上。到目前为止,我是这样做的:array_data_type = image.dtype.namearray_shape = image.shapeto_send = array_data_shape + SEPARATOR + cPickle.dumps(array_shape) + SEPARATOR + image.tobytes()streaming_socket.sendall(to_send)连接现在大约需要 0.044 秒,我希望它更快。可以更快吗?
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

使用该join方法创建单个str结果,而不是在str评估每个+操作时创建一系列临时对象。


to_send = SEPARATOR.join([array_data_shape, cPickle.dumps(array_shape), image.tobytes()])

您当前的代码相当于


tmp1 = array_data_shape + SEPARATOR

tmp2 = tmp1 + cPickle.dumps(array_shape)

tmp3 = tmp2 + SEPARATOR

to_send = tmp3 + image.tobytes()

并且每个+都必须将它的两个参数复制到str它构造的新参数中。运行时间是最终结果长度的二次方*,而SEPARATOR.join线性。


* 假设你加入的东西大小大致相等,无论如何。严格来说,每个+参数的大小都是线性的,单个项目被复制的次数与它的剩余距离成正比。假设xi表示i第 th 个字符串的大小,则完成的总工作为(x1 + x2) + (x1 + x2 + x3) + ... + (x1 + x2 + ... + xn)。


查看完整回答
反对 回复 2021-11-16
  • 1 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信