【问题标题】:When to use io.BytesIO() in Python for modifying strings何时在 Python 中使用 io.BytesIO() 来修改字符串
【发布时间】:2020-07-21 22:59:29
【问题描述】:

我正在研究 IO python 模块。 我有以下两个代码sn-ps:

buffer = b""
buffer += b"Hello World"
buffer += b"Hello World"
buffer += b"Hello World"



import io 
with io.BytesIO() as f:
    f.write(b"Hello World")
    f.write(b"Hello World")
    f.write(b"Hello World")

对我来说,这两个块几乎做同样的事情。 唯一的区别是第二个有效,而第一个无效。

我听说第二种方式通常更快,但我不知道为什么。

当第二种方法相对于第一种方法(在字符串修改中)更受欢迎时,有人可以解释一下吗?

【问题讨论】:

    标签: python string io


    【解决方案1】:

    Bytes objects 是不可变的,因此每次就地添加都会创建一个新对象。如果该操作重复多次,则可能会导致性能下降。来自 Python sequence docs(无关部分省略)

    1. 连接不可变序列总是会产生一个新对象。这意味着通过重复连接构建序列将在总序列长度中具有二次运行时成本。要获得线性运行时成本,您必须切换到以下备选方案之一:

    ...

    • 如果连接字节对象,您可以类似地使用bytes.join()io.BytesIO,或者您可以使用bytearray 对象进行就地连接。 bytearray 对象是可变的并且具有高效的过度分配机制

    ...

    【讨论】:

      猜你喜欢
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      相关资源
      最近更新 更多