python字符串前面的b前缀是什么意思?
在我偶然发现的python源代码中,我在字符串前面看到了一个小的b,如:python字符串前面的b前缀是什么意思?,python,syntax,python-3.x,byte,Python,Syntax,Python 3.x,Byte,在我偶然发现的python源代码中,我在字符串前面看到了一个小的b,如: b"abcdef" 我知道表示unicode字符串的u前缀,以及表示原始字符串文字的r前缀 b代表什么?它在哪种源代码中很有用,因为它看起来就像一个没有任何前缀的普通字符串?这是Python3字节。Python2.5及更早版本中没有此前缀(它相当于2.x的普通字符串,而3.x的普通字符串相当于2.x中带有u前缀的文本)。在Python 2.6+中,它相当于一个普通字符串。前缀b表示a 如果在Python3源代码中看到它,
b"abcdef"
我知道表示unicode字符串的u
前缀,以及表示原始字符串文字的r
前缀
b
代表什么?它在哪种源代码中很有用,因为它看起来就像一个没有任何前缀的普通字符串?这是Python3字节。Python2.5及更早版本中没有此前缀(它相当于2.x的普通字符串,而3.x的普通字符串相当于2.x中带有u
前缀的文本)。在Python 2.6+中,它相当于一个普通字符串。前缀b
表示a
如果在Python3源代码中看到它,则该表达式将创建一个,而不是一个正则表达式。如果您看到它在pythonshell中回响,或者作为列表、dict或其他容器内容的一部分,那么您将看到使用此符号表示的bytes
对象
bytes
对象基本上包含范围为0-255的整数序列,但当表示时,Python会显示这些字节,以便更容易读取其内容。外部的任何字节都显示为转义序列(例如\n
,\x82
等)。相反,您可以使用ASCII字符和转义序列来定义字节值;对于ASCII值,使用其数值(例如b'A'
==b'\x41'
)
由于字节
对象由一个整数序列组成,因此可以从任何其他值在0-255范围内的整数序列构造字节
对象,如列表:
bytes([72, 101, 108, 108, 111])
索引返回整数(但是切片生成一个新的bytes
值;对于上面的示例,value[0]
给出72
,但是value[:1]
是b'H'
因为72是大写字母H的ASCII码点)
字节
模型二进制数据,包括编码文本。如果字节
值确实包含文本,则需要首先使用正确的编解码器对其进行解码。例如,如果数据编码为UTF-8,则可以通过以下方式获得Unicodestr
值:
strvalue = bytesvalue.decode('utf-8')
相反,要从str
对象中的文本转到字节,需要进行编码。您需要决定要使用的编码;默认情况下使用UTF-8,但您需要的是高度依赖于您的用例:
bytesvalue = strvalue.encode('utf-8')
您还可以使用构造函数字节(strvalue,encoding)
执行相同的操作
解码和编码方法都需要一个额外的参数
Python2,版本2.6和2.7也支持使用b'..'
string literal语法创建字符串文字,以简化在Python2和3上都能工作的代码
bytes
对象是不可变的,就像str
字符串一样。如果需要具有可变字节值,请使用 @WRAR:Was在python2.6代码中我看到了这一点,似乎它是在python2.6I中引入的,在发布之前,我在2.6参考中特别检查了它:OK,“为了将来的兼容性,python2.6添加了字节作为str类型的同义词,并且它还支持b''表示法。”.由于以上链接现在指向2.7引用,并且添加了b前缀,因此这里有一个指向旧的伪引用@SLott的链接:按照您提供的链接,您将看到字符串前缀中不允许使用b前缀。。。对于2.6(看起来像参考材料中的一个小错误)。在谷歌上搜索这些东西并不容易。我尝试了“b python字符串前缀”之类的关键词,但基本上一无所获;这是关于Python 3:。为了便于跨版本的Python代码,中现在也支持前缀。这个问题既不是“完全重复”,也不是对“我可以在打印语句中去掉这个“b”字符吗?”问题的回答。请marijin取消标记,好吗?提问者和实际试图回答问题的人可能都希望能够回答实际提出的问题。