在 Python 中字节对象相对于字符串对象有哪些优势?
Which are the advantages of byte objects over string objects in Python?
我了解 byte/bytearray 和 Python 中的字符串之间的区别以及如何 handle/manipulate/convert 这些对象,但我找不到现实生活中 scenarios/examples 您希望工作的地方在代码中使用字节而不是字符串。
在 Python 中字节对象相对于字符串对象有哪些优势?
在哪些现实生活场景中,您应该将代码字符串转换为字节?为什么?
在哪些现实生活场景中,您应该将代码字符串转换为字节,为什么?
一个例子是使用一些适用于 bytes
而不是 str
的压缩算法。看看 lzma built-in module examples,请注意它确实适用于 bytes
而不是 str
。如果有大量文本,这可以更有效地使用可用内存(即,将相同的文本保存在更小的 space 中)。
对于所有现代计算机体系结构,一个字节由 8 位组成,因此可以编码 256 个不同的值。
在 ASCII 字符编码中,只有 128 个不同的值,其中只有一部分是可打印的。使用 UTF-8 会变得有点复杂,但您最终会遇到类似的问题,即并非所有字节序列都可以表示为字符串。所以只要你有一个不能表示为字符串的字节序列,你就必须使用 bytes()
或 bytearray
.
您可能需要使用字节的一个示例是,在使用加密和伪随机序列生成时,您通常会以无法一对一表示为细绳。这是因为您希望在生成伪随机数和序列时使用尽可能大的输出 space。例如,参见标准库中的 secrets.token_bytes。
如果你想将这样的序列表示为字符串,可以将它编码成一个字节序列,这些字节序列都在 ASCII 编码中 space,当然,代价是使用更多字节。例如,您可以将其编码为十六进制字符或 base64。十六进制的优点是生成的字符串的大小始终为 2 * n_bytes
,而 base64 是将字节编码为 ASCII 的最有效方式,即它将使用最少的额外字节。请注意,secrets stdlib 模块还为您提供了为您进行此转换的便利函数。
我了解 byte/bytearray 和 Python 中的字符串之间的区别以及如何 handle/manipulate/convert 这些对象,但我找不到现实生活中 scenarios/examples 您希望工作的地方在代码中使用字节而不是字符串。
在 Python 中字节对象相对于字符串对象有哪些优势? 在哪些现实生活场景中,您应该将代码字符串转换为字节?为什么?
在哪些现实生活场景中,您应该将代码字符串转换为字节,为什么?
一个例子是使用一些适用于 bytes
而不是 str
的压缩算法。看看 lzma built-in module examples,请注意它确实适用于 bytes
而不是 str
。如果有大量文本,这可以更有效地使用可用内存(即,将相同的文本保存在更小的 space 中)。
对于所有现代计算机体系结构,一个字节由 8 位组成,因此可以编码 256 个不同的值。
在 ASCII 字符编码中,只有 128 个不同的值,其中只有一部分是可打印的。使用 UTF-8 会变得有点复杂,但您最终会遇到类似的问题,即并非所有字节序列都可以表示为字符串。所以只要你有一个不能表示为字符串的字节序列,你就必须使用 bytes()
或 bytearray
.
您可能需要使用字节的一个示例是,在使用加密和伪随机序列生成时,您通常会以无法一对一表示为细绳。这是因为您希望在生成伪随机数和序列时使用尽可能大的输出 space。例如,参见标准库中的 secrets.token_bytes。
如果你想将这样的序列表示为字符串,可以将它编码成一个字节序列,这些字节序列都在 ASCII 编码中 space,当然,代价是使用更多字节。例如,您可以将其编码为十六进制字符或 base64。十六进制的优点是生成的字符串的大小始终为 2 * n_bytes
,而 base64 是将字节编码为 ASCII 的最有效方式,即它将使用最少的额外字节。请注意,secrets stdlib 模块还为您提供了为您进行此转换的便利函数。