我正在寻找格式化的字节字符串文字。具体来说,相当于
name = "Hello"
bytes(f"Some format string {name}")
可能是类似的东西fb"Some format string {name}"
。
这样的事情存在吗?
我正在寻找格式化的字节字符串文字。具体来说,相当于
name = "Hello"
bytes(f"Some format string {name}")
可能是类似的东西fb"Some format string {name}"
。
这样的事情存在吗?
出于我们不支持的相同原因
bytes.format()
,您不能'f'
与'b'
字符串文字结合使用。主要问题是对象的__format__()
方法可能返回与字节字符串不兼容的 Unicode 数据。二进制 f 字符串首先需要
bytes.format()
. 这个想法过去曾被提出,最近一次是在PEP 461中。对这种特性的讨论通常建议要么
添加一个方法,例如
__bformat__()
对象可以控制如何将其转换为字节,或者
bytes.format()
不像str.format()
. _如果需要这样的功能,这两者在未来仍然是选项。
在 3.6+ 中,您可以执行以下操作:
>>> a = 123
>>> f'{a}'.encode()
b'123'
您的建议实际上非常接近;如果您在通话中添加一个encoding
kwarg bytes()
,那么您将获得所需的行为:
>>> name = "Hello"
>>> bytes(f"Some format string {name}", encoding="utf-8")
b'Some format string Hello'
警告:这对我来说适用于 3.8,但文档中字节对象标题底部的注释似乎表明这应该适用于所有 3.x 中的任何字符串格式化方法(str.format()
用于版本 <3.6,因为那时添加了 f 字符串,但 OP 特别询问 3.6+)。
这是从 python 2 到 python3 的较大变化之一。它们以不同的方式处理 unicode 和字符串。
这就是您转换为字节的方式。
string = "some string format"
string.encode()
print(string)
这就是您解码为字符串的方式。
string.decode()
通过 Charles Severence 的课程讲座,我对 Python 2 和 3 更改为 unicode 之间的区别有了更好的理解。如果您想了解 python 2 和 3 之间的差异以及它们如何处理字符,特别是 unicode,您可以观看整个 17 分钟的视频或快进到 10:30 左右的某个地方。
我了解您的实际问题是如何格式化同时具有字符串和字节的字符串。
inBytes = b"testing"
inString = 'Hello'
type(inString) #This will yield <class 'str'>
type(inBytes) #this will yield <class 'bytes'>
在这里你可以看到我有一个字符串一个变量和一个字节变量。
这就是您将字节和字符串组合成一个字符串的方式。
formattedString=(inString + ' ' + inBytes.encode())