2017-07-27 89 views
6

我正在寻找格式化的字节字符串文字。具体而言,相当于Python 3.6+中是否有格式化的字节字符串字面值?

name = "Hello" 
bytes(f"Some format string {name}") 

可能类似于fb"Some format string {name}"

这样的事情是否存在?

+3

我不这么认为。 'bytes'甚至没有'.format'方法,所以如果他们有f-string等价物,我会感到惊讶。最近你会得到[字节格式](https://docs.python.org/3/library/stdtypes.html#printf-style-bytes-formatting) –

+2

另外,顺便说一句,总是标记python问题与通用[python]标签。如果问题是版本特定的,则使用特定于版本的标记*作为通用标记的附加*。 –

回答

7

The idea is explicitly dismissed in the PEP

对于我们不支持bytes.format()同样的原因,你可能 不'b'字符串文字结合'f'。主要问题 是对象的__format__()方法可能会返回与字节字符串不兼容的Unicode数据 。

二进制f字符串首先需要 bytes.format()的解决方案。这个想法过去已经提出,最近 最近在PEP 461。这样的特征的讨论通常 建议要么

  • 加入方法如__bformat__()这样一个目的可以控制它是如何转化为字节,或具有bytes.format()

  • 不会像通用或可扩展如str.format()

的这些都保持为在未来的选择,如果这样的功能 是期望的。

+0

太棒了,这正是我想要的。我很难找到一个参考。谢谢! –

-2

这是从python 2到python3的更大变化之一。他们处理unicode和字符串的方式不同。

这是你如何转换为字节。

string = "some string format" 
string.encode() 
print(string) 

这是你如何解码字符串。

string.decode() 

我不得不为Python 2之间的差的更好的理解与3改变通过此coursera lecture由Charles Severence为Unicode。您可以观看整个17分钟的视频,或者快速转发到10:30左右的某个地方,如果您想了解Python 2和Python 3之间的区别以及它们如何处理字符以及特别是unicode。

我明白你的实际问题是你如何格式化一个既有字符串又有字节的字符串。

inBytes = b"testing" 
inString = 'Hello' 
type(inString) #This will yield <class 'str'> 
type(inBytes) #this will yield <class 'bytes'> 

在这里你可以看到我有一个字符串变量和一个字节变量。

这是如何将一个字节和字符串合并为一个字符串。

formattedString=(inString + ' ' + inBytes.encode()) 
+6

我很欣赏你的时间和努力,但你的回答与这个问题无关。 – direprobs

+0

我明白了Enrico的问题,特别是他如何在Python 3中转换字节和字符串,这个区域在新版本中发生了显着变化。我的答案旨在帮助他理解这种变化是如何发生的以及他如何在Python 3中处理类似的操作。这就是为什么我觉得这个回应与他的问题有关。 – Dom

+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 - [来自评论](/ review/low-quality-posts/16853347) –