Python 字节()

Python bytes()是一个内置函数,它返回一个 bytes 对象,该对象是 0 <= x < 256 范围内的不可变整数序列。根据作为源传递的对象类型,它相应地初始化字节对象。

让我们在本文中看看如何使用此功能。


句法

这需要三个可选参数,即:

  • source-> 初始化字节数组的源
  • encoding-> 字符串的编码source(可以是UTF-8等)。
  • errors-> 编码源字符串失败时函数的行为。
byte_array = bytes(source, encoding, errors)

由于所有三个参数都是可选的,因此我们可以传递一个空字符串来生成一个空字节数组(大小为 0 的字节数组)。

根据source参数的类型,将初始化适当的字节数组。

  • 如果source是字符串,Python bytes()将使用 将该字符串转换为字节str.encode()因此,我们还必须提供编码 和可选的错误,就像encode()用于处理字符串一样。
  • 如果source是 Integer,Python bytes()将创建一个提供的整数大小的数组,全部初始化为NULL
  • 如果source是 class Object,则将使用对象的只读缓冲区来初始化字节数组。
  • 如果source是一个可迭代对象,则它必须是 0 <= x < 256 范围内的整数的可迭代对象,这些整数用作数组的初始内容。

如果sourceNone,这将给出 a TypeError,因为它无法将None对象转换为字节数组。

为了更好地理解该函数,让我们看一些示例。


使用 Python bytes()

不带 no 和 None 参数

b = bytes()
print(b)
c = bytes(None)
print(c)

输出

b''
TypeError: cannot convert 'NoneType' object to bytes

带有源字符串

任何未提供编码的字符串都会引发TypeError.

同样,尝试修改bytes对象也会给出相同的异常,因为它本质上是不可变的。

try:
    a = bytes('Hello from AskPython')
except TypeError:
    print('We need to specify string encoding always!')
 
b = bytes('Hello from AskPython', 'UTF-8')
print(type(b), b)
 
try:
    b[0] = 10
except TypeError:
    print('byte objects are immutable!')

输出

We need to specify string encoding always!
<class 'bytes'> b'Hello from AskPython'
byte objects are immutable!

带有源整数

整数零初始化数组中的许多字节元素对象。

a = bytes(10)
print(type(a), a)

输出

<class 'bytes'> b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

正如您所看到的,bytes 对象是一个由 10 个元素组成的零初始化数组。

具有可迭代的源

这会使用多个元素初始化数组len(iterable),每个元素的值等于可迭代对象上相应元素的值。

字节数组值可以通过正常迭代访问,但不能修改,因为它们是不可变的。

a = bytes([1, 2, 3])
print(type(a), a)
print('Length =', len(a))
 
# To access the byte array values, we can iterate through it!
for byte_obj in a:
    print(byte_object)

输出

<class 'bytes'> b'\x01\x02\x03'
Length = 3
1
2
3

可迭代对象上的任何其他内容都会导致TypeError

>>> a = bytes([1, 2, 3, 'Hi'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object cannot be interpreted as an integer

结论

在这篇文章中,我们学习了Python bytes()函数,它可以将合适的对象转换为字节数组。


参考

  • JournalDev 关于 bytes() 的文章