在字符串文字前面,‘b’字符是做什么的?

在字符串文字前面,‘b’字符是做什么的?

显然,以下是有效的语法

my_string = b'The string'

我想知道:

  1. 这是什么

    b

    字串前面的意思是?
  2. 使用它有什么效果?
  3. 使用它的适当情况是什么?

我找到了一个相关问题就在这里,但是这个问题是关于PHP的,它指出b用于指示字符串是二进制的,而Unicode是从PHP<6版本兼容的代码在迁移到PHP 6时所需的。我认为这不适用于Python。

我确实找到了本文件在Python站点上使用u在相同的语法中指定字符串为Unicode的字符。不幸的是,它没有提到b文件中任何地方的字符。

而且,出于好奇,是否有更多的符号比bu做其他的事?


蝴蝶不菲
浏览 3885回答 4
4回答

阿晨1998

Python 3.x明确区分以下类型:str&nbsp;=&nbsp;'...'文本=Unicode字符序列(UTF-16或UTF-32,取决于Python是如何编译的)bytes&nbsp;=&nbsp;b'...'文本=八元序列(0到255之间的整数)如果您熟悉Java或C#,请考虑str如String和bytes如byte[]..如果您熟悉SQL,请考虑str如NVARCHAR和bytes如BINARY或BLOB..如果您熟悉Windows注册表,请考虑str如REG_SZ和bytes如REG_BINARY..如果你熟悉C(+),那么忘记你学到的一切char和字符串,因为字符不是字节..这个想法早就过时了。你用str当你想代表文本的时候。print('שלום&nbsp;עולם')你用bytes当您想表示像structs这样的低级二进制数据时。NaN&nbsp;=&nbsp;struct.unpack('>d',&nbsp;b'\xff\xf8\x00\x00\x00\x00\x00\x00')[0]你可以的编码&nbsp;a&nbsp;str转到bytes对象。>>>&nbsp;'\uFEFF'.encode('UTF-8')b'\xef\xbb\xbf'你可以解码bytes变成str.>>>&nbsp;b'\xE2\x82\xAC'.decode('UTF-8')'€'但你不能随意混合这两种类型。>>>&nbsp;b'\xEF\xBB\xBF'&nbsp;+&nbsp;'Text&nbsp;with&nbsp;a&nbsp;UTF-8&nbsp;BOM'Traceback&nbsp;(most&nbsp;recent&nbsp;call&nbsp;last): &nbsp;&nbsp;File&nbsp;"<stdin>",&nbsp;line&nbsp;1,&nbsp;in&nbsp;<module>TypeError:&nbsp;can't&nbsp;concat&nbsp;bytes&nbsp;to&nbsp;str二.b'...'符号有点混乱,因为它允许用ASCII字符而不是十六进制数字来指定字节0x01-0x7F。>>>&nbsp;b'A'&nbsp;==&nbsp;b'\x41'True但我必须强调,字符不是字节.>>>&nbsp;'A'&nbsp;==&nbsp;b'A'False在Python2.x中Python的前3.0版本缺乏文本和二进制数据之间的这种区别。相反,有:unicode&nbsp;=&nbsp;u'...'文字=Unicode字符序列=3.xstrstr&nbsp;=&nbsp;'...'文字=混乱的字节/字符序列通常是文本,以某种未指定的编码方式编码。但也用来表示二进制数据,如struct.pack输出。为了简化2.x到-3.x的转换,b'...'将文字语法移植到Python2.6,以便区分二进制字符串(应该是bytes在3.x中)从文本字符串(应该是str(见3.x)。这个b前缀在2.x中什么也不做,但是告诉2to3脚本不将其转换为3.x中的Unicode字符串。所以是的,b'...'Python中的文字具有与PHP中相同的目的。而且,出于好奇,还有比b和u更多的符号做其他事情吗?二.r前缀创建原始字符串(例如,r'\t'是反斜杠+t(而不是制表符),以及三重引号'''...'''或"""..."""允许多行字符串文字.

达令说

b表示字节字符串。字节是实际数据。字符串是一种抽象。如果您有多个字符串对象,并且您接受了一个字符,那么它将是一个字符串,并且根据编码的不同,它的大小可能超过1字节。如果使用一个字节字符串的1字节,则从0-255中得到一个8位值,如果编码导致的字符大于1字节,它可能不代表完整的字符。tbh我会使用字符串,除非我有一些特定的低级原因来使用字节。

潇湘沐

它把它变成了bytes文字(或str在2.x)中,并且对2.6+有效。二.r前缀会导致反斜杠“未解释”(不忽略)和差异。是吗?)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python