本系列将会陆续整理分享一些的Python内置函数。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/11x9_wCZ3yiYOe5nVcRk2CQ?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_built-in_functions
bytearray(source=b'')
bytearray(source, encoding)
bytearray(source, encoding, errors)
-
source:
-
如果不提供参数,则创建一个大小为 0 的数组;
-
如果 source 是一个字符串,需要提供 encoding 参数(可选的 errors 参数),bytearray() 将使用 str.encode() 方法将字符串转换为字节;
-
如果 source 是一个整数,数组将具有该大小,并用空字节(null bytes)初始化;
-
如果 source 是一个符合缓冲区接口的对象,则使用该对象的只读缓冲区来初始化字节数组;
-
如果
source
是一个可迭代对象,它必须是一个包含范围在 0 到 255 之间的整数的可迭代对象,这些整数将作为数组的初始内容。
-
encoding:可选参数,指定字符串转换为字节串时使用的编码方式,如
“utf-8”、“ascii“等。
-
errors:可选参数,指定编码或解码时的错误处理方式,如 “strict”(默认)、“ignore”、“replace” 等。
返回值:
bytearray 类型继承了大多数可变序列类型的方法,同时也拥有 bytes 类型的大多数方法,这些方法允许对字节数组进行各种操作,包括修改、搜索、排序等。以下是 bytearray 对象提供的常用方法:
索引和切片:
-
__getitem__(key): 获取字节数组中指定索引或切片的字节。 -
__setitem__(key, value): 设置字节数组中指定索引或切片的字节。 -
__delitem__(key): 删除字节数组中指定索引或切片的字节。
-
append(int):追加一个字节到末尾。 -
extend(iterable_of_ints): 追加多个字节到末尾 -
insert(index, int): 在指定索引位置插入一个字节。 -
remove(int): 移除第一个匹配的字节。 -
pop([index]): 移除并返回指定索引位置的字节,如果不提供索引,则移除并返回最后一个字节。 -
replace(old, new[, count]): 将字节数组中的 old 字节序列替换为 new 字节序列,最多替换 count 次。 -
clear(): 清空字节数组。
-
count(x):返回字节 x 在字节数组中出现的次数。 -
index(x[, start[, end]]):返回字节 x 在字节数组中的第一个索引位置。可以指定搜索范围 start 和 end。 -
rindex(x[, start[, end]]): 返回字节 x 在字节数组中的最后一个索引位置。可以指定搜索范围 start 和 end。 -
find(sub[, start[, end]]): 返回子字节序列 sub 在字节数组中第一次出现的索引。如果未找到,返回 -1。 -
rfind(sub[, start[, end]]): 返回子字节序列 sub 在字节数组中最后一次出现的索引。如果未找到,返回 -1。
-
reverse(): 将字节数组中的字节顺序反转。 -
isalnum(): 检查字节数组中的所有字节是否都是字母数字字符。 -
isalpha(): 检查字节数组中的所有字节是否都是字母字符。 -
isdigit(): 检查字节数组中的所有字节是否都是数字字符。 -
isspace(): 检查字节数组中的所有字节是否都是空白字符 -
istitle(): 检查字节数组中的所有字节是否都是标题字符。 -
startswith(prefix[, start[, end]]): 检查字节数组是否以指定的前缀开始。 -
endswith(suffix[, start[, end]]): 检查字节数组是否以指定的后缀结束。 -
join(iterable): 将可迭代对象中的字节序列连接起来,使用当前字节数组作为分隔符。
下面是一些使用 bytearray() 函数的示例:
-
示例 1:基本用法
# 不提供参数
ba1 = bytearray()
print(ba1)
# 输出: bytearray(b'')
# 整数
ba2 = bytearray(5)
print(ba2)
# 输出: bytearray(b'x00x00x00x00x00')
# 可迭代对象
ba3 = bytearray([104, 101, 108, 108, 111])
print(ba3)
# 输出: bytearray(b'hello')
# 字符串
ba4 = bytearray("hello", "utf-8")
print(ba4)
# 输出: bytearray(b'hello')
# bytes 对象
b = b'world'
ba5 = bytearray(b)
print(ba5)
# 输出: bytearray(b'world')
-
示例 2:常用方法
由于 bytearray 是可变的,可以直接对字节数组进行各种操作,包括修改、搜索、排序等。
-
索引和切片
ba = bytearray(b'hello')
# 修改索引为 0 的元素
# 'H' 的 ASCII 码是 72
ba[0] = 72
print(ba)
# 输出: bytearray(b'Hello')
# 修改索引 1 到 3 之间的元素
# 'H' 的 ASCII 码是 72
ba[1:3] = [72, 72]
print(ba)
# 输出: bytearray(b'HHHlo')
# 删除元素
# 删除索引为 -1 的元素
del ba[-1]
print(ba)
# 输出: bytearray(b'HHHl')
-
修改类方法
ba = bytearray(b'hello')
# 添加一个字节
# 'o' 的 ASCII 码是 111
ba.append(111)
print(ba)
# 输出: bytearray(b'helloo')
# 添加多个字节
# '!' 的 ASCII 码是 33, ',' 的 ASCII 码是 44
ba.extend([33, 44])
print(ba)
# 输出: bytearray(b'helloo!,')
# 在指定位置 1 插入一个字节
# 'o' 的 ASCII 码是 111
ba.insert(1, 111)
print(ba)
# 输出: bytearray(b'hoelloo!,')
# 删除并返回指定位置 1 的字节
print(ba.pop(1))
# 输出: 111,'o' 的 ASCII 码
# 删除第一个ASCII 码为 111 的字节
ba.remove(111)
print(ba)
# 输出: bytearray(b'hello!,')
# 将字节数组中的l字节序列替换为L字节,替换2次
print(ba.replace(b'l' , b'L' , 2))
# 输出: bytearray(b'heLLo!,')
-
搜索类方法
ba = bytearray(b'hoelloeo')
# 字节 o 在字节数组中出现的次数,可以传入ASCII 码
print(ba.count(111))
# 输出:3
print(ba.count(b'o'))
# 输出:3
# 字节 o 在字节数组中的第一个索引位置
print(ba.index(111))
# 输出:1
# 指定搜索范围 start 和 end
print(ba.index(111 ,2 ,6))
# 输出:5
# 字节 o 在字节数组中的最后一个索引位置
print(ba.rindex(111))
# 输出:7
# 子字节序列在字节数组中第一次出现的索引
print(ba.find(b'oe'))
# 输出:1
# 子字节序列在字节数组中最后一次出现的索引
print(ba.rfind(b'oe'))
# 输出:5
-
其他方法:
ba = bytearray(b'hello')
# 将字节数组中的字节顺序反转
ba.reverse()
print(ba)
# 输出: bytearray(b'olleh')
# 检查字节数组中的所有字节是否都是数字字符
print(ba.isdigit())
# 输出: False
# 检查字节数组中的所有字节是否都是字母字符
print(ba.isalpha())
# 输出: True
# 检查字节数组是否以指定的前缀开始
print(ba.startswith(b'o'))
# 输出: True
-
示例 3:转换为 bytes
由于 bytearray 对象是可变的,如果需要一个不可变的字节序列,可以将其转换为 bytes 对象。
ba = bytearray(b'hello')
# 转换为 bytes
b = bytes(ba)
print(b)
# 输出: b'hello'


本篇文章来源于微信公众号: 码农设计师