首 页IT知识库收藏内容
当前位置:翔宇亭IT乐园IT知识库Python

Python bytes()函数

减小字体 增大字体 作者:本站  来源:本站整理  发布时间:2021-07-28 00:25:15

Python bytes()函数返回一个整型数字序列的字节对象,整型数字的取值范围为:0<=x<256.

bytes()函数的语法格式

官方参考文档给出的bytes()函数语法格式如下:

class bytes([source[, encoding[, errors]]])

参数

该函数有三个可选参数:

source 可选参数,用于初始化字节对象;

encoding 可选参数,当source为字符串类型时使用该参数指明编码格式,Python使用str.encode()函数将字符串转换为字节。

errors 当source为字符串类型,并使用encoding指定的编码方式编码失败时给出的错误信息。

在使用bytes()函数时,要注意以下几条规则:

(1)当没有传递任何参数时,bytes()函数返回空的字节对象;

(2)当source为整型数字时,bytes()函数产生长度为source的null值字节数对象数组;

(3)当source为字符串时,encoding参数是必选参数,以让bytes()函数按照encoding指定的编码方式产生字节对象;

(4)如果source是可迭代对象时,如列表、元组等,可迭代对象元素必须是0到255的整型数。

从上面的描述中可以看出,bytes()函数与前面介绍的bytearray()函数非常相似。其不同之处在于,bytes()产生的字节对象是不可变的,而bytearray()函数产生的字节数组是可变的。

返回值

该函数返回一个不可变的字节对象。

Python bytes()函数

bytes()函数使用示例

下面使用几个例子来说明bytes()函数的具体使用方法。

1、不带任何参数的bytes()函数

b = bytes()
print(b)
n = bytes(None)
print(n)

输出结果如下:

b''
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    n = bytes(None)
TypeError: cannot convert 'NoneType' object to bytes

在Python3.8.2 Shell中的运行情况如下图所示:

Python bytes()不带参数的情况 

从上面的输出结果中可以看出,在不给任何参数时,bytes()函数输出空的字节对象(前面以'b'开始)。

但是不带参数不等于None,当给定None作为参数时,将引发TypeError错误:无法将NoneType对象转换为字节。

2、传递字符串参数

当source为字符串类型时,bytes函数需同时指定encoding参数。

str1 = "Hello World!"
print(bytes(str1,"utf-8"))
print(bytes(str1, "ASCII"))

str2 = "关注公众号【优雅的代码】"
print(bytes(str2, "utf-8"))
print(bytes(str2, "ASCII"))

输出结果如下:

b'Hello World!'
b'Hello World!'
b'\xe5\x85\xb3\xe6\xb3\xa8\xe5\x85\xac\xe4\xbc\x97\xe5\x8f\xb7\xe3\x80\x90\xe4\xbc\x98\xe9\x9b\x85\xe7\x9a\x84\xe4\xbb\xa3\xe7\xa0\x81\xe3\x80\x91'
Traceback (most recent call last):
  File "D:/PY/pythonbytes.py", line 7, in <module>
    print(bytes(str2, "ASCII"))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128)

因为ASCII的编码范围是0~127,所以对汉字指定ASCII编码格式时会报错:UnicodeEncodeError .

下面再看另外一个例子:

str3 = "abcd"
res = bytes(str3,"utf-8")
print("res=",res)
res[1] = 66
print(res)

输出结果:

res= b'abcd'
Traceback (most recent call last):
  File "D:\PY\pythonbytes.py", line 4, in <module>
    res[1] = 66
TypeError: 'bytes' object does not support item assignment

上面这个例子说明bytes()函数产生的字节对象是不可变的,所以可以认为bytes()函数是bytearray()函数的不可变版本。

3、使用整数作为参数

source参数为整型数时,bytes()函数产生指定长度的null字节对象。

b = bytes(5)
print(b)

输出结果:

b'\x00\x00\x00\x00\x00'

4、可迭代对象作为参数

 可迭代对象作为参数时,可迭代对象的元素必须是整型数,否则将引发TypeError错误。

b1 = bytes([65,66,67])
print(b1)
b2 = bytes([48,49,50])
print(b2)

输出结果:

b'ABC'
b'012'

下面再看另外一个例子:

b = bytes(['A','B','C'])
print(b)

输出结果:

Traceback (most recent call last):
  File "D:\PY\pythonbytes.py", line 1, in <module>
    b = bytes(['A','B','C'])
TypeError: 'str' object cannot be interpreted as an integer

上面这个例子说明,当使用可迭代对象作为参数时,可迭代对象的元素应该是代表对应字符的整型数。

本文(完)


如需转载请注明出处:翔宇亭IT乐园(http://www.biye5u.com),并给出本文链接地址:

http://www.biye5u.com/article/python/2021/6525.html

微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。

个人成长离不开各位的关注,你的关注就是我继续前行的动力。

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
愿您的精彩评论引起共鸣,带来思考和价值。
用户名: 查看更多评论
分 值:100分 90分 80分 70分 60分 40分 20分
内 容:
验证码:
关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2024 biye5u.com. All Rights Reserved.