在Python 3.5中,x = b'ABC'
是否等同于x='ABC'.encode("ascii")
?这两种方法之间是否存在差异。
答案 0 :(得分:3)
他们产生相同的结果:
a b c
indicator
hot 2 2 4
cold 3 1 1
但是>>> 'ABC'.encode("ascii")
b'ABC'
>>> b'ABC'
b'ABC'
将在运行时调用编码器,而不是在编译时调用。
答案 1 :(得分:2)
Python 3中的快速测试表明它们确实是等效的:
In [1]: x = b'ABC'
In [2]: y = 'ABC'.encode('ascii')
In [3]: x == y
Out[3]: True
In [4]: type(x)
Out[4]: bytes
In [5]: type(y)
Out[5]: bytes
根据official python documentation:
字节文字总是以' b'为前缀。或者' B&#39 ;;它们生成字节类型的实例而不是str类型。它们可能只包含ASCII字符;数字值为128或更大的字节必须用转义表示。
因此,只要 unicode string 中的所有字符都是ASCII,它们就会被视为相同。
答案 2 :(得分:0)
是和否。是的,对于您的具体示例,两者是等效的,因为它们产生相同的结果。
但是,对于通用用法,它们有一些细微的区别。例如,考虑他们处理尝试编码非ascii字符的不同方式:
@>>> b'Æ'
File "<stdin>", line 1
SyntaxError: bytes can only contain ASCII literal characters.
@>>> 'Æ'.encode("ascii")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character '\xc6' in position 0: ordinal not in range(128)