python3中str和bytes分开了,那么bytes与str之间到底是什么关系呢?下面从表现形式、处理方式、存储形式三个方面来阐述其区别

1. 在字符串前面加上b,就表示bytes数据类型

 s1 = "hello"
b1 = b"hello" # 前面加上b让它变成bytes类型
print(s1)
print(b1)

输出

s1 = "hello"
b1 = b"hello" # 前面加上b让它变成bytes类型
print(s1)
print(b1)

2. 字符串是以字符为单位进行处理的,bytes类型是以字节为单位处理的。

python3中bytes类型主要用于网络传输和硬盘存储,是以字节为单位处理的

3. 字符串的编码方法只能是Unicode,bytes可以是gbk,utf-8或其他非Unicode形式。bytes类型只负责以二进制字节序列的形式记录信息,至于该二进制序列表示什么信息(比如到底是什么字符)由编码形式决定

python3中对str和bytes做了严格区分,文本总是用str类型表示,编码方式是Unicode,二进制数据则用bytes类型表示。下麦呢来看一段代码

 s = "hello中国"
b = s.encode("utf-8")
print(b)
for i in b: # bytes类型也是可迭代对象,是不是很神奇
print(i)
for i in b:
print(bin(i))

输出

b'hello\xe4\xb8\xad\xe5\x9b\xbd'
104
101
108
108
111
228
184
173
229
155
189
0b1101000
0b1100101
0b1101100
0b1101100
0b1101111
0b11100100
0b10111000
0b10101101
0b11100101
0b10011011
0b10111101 Process finished with exit code 0

bytes实际上是一串0和1的组合,但为了在ide环境中让我们相对直观的观察,它被表现成了b'\xe4\xb8\xad\xe6\x96\x87'这种形式,开头的b表示这是一个bytes类型。\xe4是十六进制的表示方式,它占用1个字节的长度。bytes是一种比特流,它的存在形式是01010001110这种。我们无论是在写代码,还是阅读文章的过程中,肯定不会有人直接阅读这种比特流,它必须有一个编码方式,使得它变成有意义的比特流,而不是一堆晦涩难懂的01组合。

字符串有一个encode()方法,与bytes的decode方法相对应,利用这两个方法可以实现字符串与bytes类型的转化

 s1 = "hello"
b1 = s1.encode("utf-8")
print(b1)
s2 = b1.decode("utf-8")
print(s2)

输出

b'hello'
hello Process finished with exit code 0

还有一种方法,就是利用调用bytes()类和str()类来完成转化

 b1 = bytes(s1, encoding="utf-8")
print(b1)
s2 = str(b1, encoding="utf-8")
print(s2)

输出‘

b'hello'
hello Process finished with exit code 0

实际上,我们知道,所有数据包括字符串,存储到硬盘上都是以0101的形式,也都需要编码解码。关于bytes和str,只需记住这几句话:

(1)在将字符串存入磁盘和从磁盘读取字符串的过程中,Python自动地帮你完成了编码和解码的工作,你不需要关心它的过程;

(2)使用bytes类型,实质上是告诉Python,不需要它帮你自动地完成编码和解码的工作,而是用户自己手动进行,并指定编码格式;

(3)bytes类型主要用于网络传输和硬盘存储

python3 bytes数据类型探讨的更多相关文章

  1. bytes数据类型和字符串的编码解码,三元运算,进制互换

    三元运算 如果这个条件成立就存这个值,如果那个条件成立就存那个值. 进制 bytes类型,字节数据类型也就是二进制类型,这个是python3专有数据类型,在python2里跟字符串是一个类型,也就是p ...

  2. Python3 基本数据类型注意事项

    Python3 基本数据类型 教程转自菜鸟教程:http://www.runoob.com/python3/python3-data-type.html Python中的变量不需要声明.每个变量在使用 ...

  3. Python3 的数据类型

    Python3 的数据类型 整形,浮点型,布尔类型 类型转换 int() 整形 采用截断的方式即向下取整,比如 a=5.5 int (a) 返回值为5 怎样才能使int()按照"四舍五入&q ...

  4. 三元运算和bytes数据类型笔记

    三元运算 result = 值1 if条件  else 值2 如果条件为真:result = 值1 如果条件为假:result = 值2 bytes数据类型 字符串可以编码成字节包,字节包也可以解码成 ...

  5. Python3 常见数据类型的转换

    Python3 常见数据类型的转换 一.数据类型的转换,你只需要将数据类型作为函数名即可 OCP培训说明连接:https://mp.weixin.qq.com/s/2cymJ4xiBPtTaHu16H ...

  6. 3. Python3 基本数据类型

    Python3 基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型& ...

  7. Python3 bytes 函数

    Python3 bytes 函数  Python3 内置函数 描述 bytes 函数返回一个新的 bytes 对象,该对象是一个 0 <= x < 256 区间内的整数不可变序列.它是 b ...

  8. python003 Python3 基本数据类型

    Python3 基本数据类型Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建.在 Python 中,变量就是变量,它没有类型,我们所说的"类型&qu ...

  9. 【Python学习】Python3 基本数据类型

    参考学习地址:https://www.runoob.com/python3/python3-data-type.html Python3 基本数据类型 Python 中的变量不需要声明.每个变量在使用 ...

随机推荐

  1. Linux服务器定时健康检查,发生故障自动微信告警

    此脚本适用于于各种Linux环境,可以实现各种监控项目,可自定义阀值,实现不同监控效果已在原有脚本基础上做了简化,提取了主要功能目前实现的有:1.磁盘监控2.内存监控3.cpu负荷监控4.进程数监控5 ...

  2. Android 获取SD路径,存储空间大小的方法

    Android用 Environment.getExternalStorageDirectory() 方法获取 SD 卡的路径 , 卡存储空间大小及已占用空间获取方法 : /* 获取存储卡路径 */ ...

  3. 【BZOJ5336】[TJOI2018]party(动态规划)

    [BZOJ5336][TJOI2018]party(动态规划) 题面 BZOJ 洛谷 题解 这题好神仙啊... 考虑普通的\(LCS\)的\(dp\),\(f[i][j]=\max\{f[i-1][j ...

  4. THUSC2017题解

    THUSC2017题解 题目都是在LOJ上交的. chocolate LOJ#2977巧克力 这题看着就让人想起了百度之星复赛的\(T5\),就是这题. 因为种类的个数很多,所以把每个种类随意\(ra ...

  5. [SPOJ375]QTREE - Query on a tree【树链剖分】

    题目描述 给你一棵树,两种操作. 修改边权,查找边权的最大值. 分析 我们都知道,树链剖分能够维护点权. 而且每一条边只有一个,且唯一对应一个儿子节点,那么就把信息放到这个儿子节点上. 注意,lca的 ...

  6. EtherType :以太网类型字段及值

    Ethernet II即DIX 2.0:Xerox与DEC.Intel在1982年制定的以太网标准帧格式.Cisco名称为:ARPA Ethernet II类型以太网帧的最小长度为64字节(6+6+2 ...

  7. 【Linux】Linux系统硬链接和软链接

    在linux系统中有种文件是链接文件,可以为解决文件的共享使用.链接的方式可以分为两种,一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link). 查看lin ...

  8. CF1137C Museums Tour(Tarjan,强连通分量)

    好题,神题. 题目链接:CF原网 洛谷 题目大意: 一个国家有 $n$ 个城市,$m$ 条有向道路组成.在这个国家一个星期有 $d$ 天,每个城市有一个博物馆. 有个旅行团在城市 $1$ 出发,当天是 ...

  9. java List<String> 转换成带逗号的字符串

    使用commons-lang3-3.3.2.jar org.apache.commons.lang3.StringUtils.join(applyNameList, ",");

  10. Circular view path xxx would dispatch back to the current handler URL,Check your ViewResolver setup

    Circular view path xxx would dispatch back to the current handler URL 通过原因分析,造成问题有两个因素:1). 缺省转发, 2). ...