是x = b'ABC'相当于python3.5中的x ='ABC'.encode(“ascii”)?

时间:2017-04-19 00:48:53

标签: python python-3.x ascii

在Python 3.5中,x = b'ABC'是否等同于x='ABC'.encode("ascii")?这两种方法之间是否存在差异。

3 个答案:

答案 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)