在Python 3中将字符串转换为字节的最佳方法?

发布于 2021-02-02 23:21:17

从TypeError的答案中可以看出,有两种不同的方式可以将字符串转换为字节:’str’不支持缓冲区接口

以下哪种方法更好或更Pythonic?还是仅仅是个人喜好问题?

b = bytes(mystring, 'utf-8')

b = mystring.encode('utf-8')
关注者
0
被浏览
173
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    如果你查看的文档bytes,它将指向bytearray

    bytearray([源[,编码[,错误]]]

    返回一个新的字节数组。bytearray类型是一个可变的整数序列,范围为0 <= x <256。它具有可变序列类型中介绍的大多数可变序列的常用方法,以及字节类型具有的大多数方法,请参见Bytes和字节数组方法。

    可选的source参数可以通过几种不同的方式用于初始化数组:

    如果是字符串,则还必须提供编码(以及可选的错误)参数;然后,bytearray()使用str.encode()将字符串转换为字节。

    如果它是整数,则数组将具有该大小,并将使用空字节初始化。

    如果它是符合缓冲区接口的对象,则该对象的只读缓冲区将用于初始化bytes数组。

    如果是可迭代的,则它必须是0 <= x <256范围内的整数的可迭代对象,这些整数用作数组的初始内容。

    没有参数,将创建大小为0的数组。

    因此,bytes除了编码字符串以外,还可以做更多的事情。这是Pythonic的用法,它允许你使用有意义的任何类型的源参数来调用构造函数。

    对于字符串编码,我认为它some_string.encode(encoding)比使用构造函数更具有Pythonic风格,因为它是最易于记录的文档-“使用此字符串并以这种编码方式对其进行编码”比bytes(some_string, encoding)- 更加清晰明了-当你使用构造函数。

    编辑:我检查了Python源。如果将unicode字符串传递给bytes使用CPython,它将调用PyUnicode_AsEncodedString,它是encode; 的实现。因此,如果你自称,则只是跳过了一个间接级别encode。

    另外,请参见Serdalis的评论- unicode_string.encode(encoding)也是Python 风格的,因为它的反函数是byte_string.decode(encoding),对称性很好。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看