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
是 classObject
,则将使用对象的只读缓冲区来初始化字节数组。 - 如果
source
是一个可迭代对象,则它必须是 0 <= x < 256 范围内的整数的可迭代对象,这些整数用作数组的初始内容。
如果source
是None
,这将给出 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() 的文章