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. 「HNOI2016」最小公倍数

    链接 loj 一道阔爱的分块 题意 边权是二元组(A, B),每次询问u, v, a, b,求u到v是否存在一条简单路径,使得各边权上\(A_{max} = a, B_{max} = b\) 分析 对 ...

  2. angularJS 路由加载js controller 未定义 解决方案

    说明 本文主要说明,在angularJS框架使用中,angularJS 路由加载js controller 未定义 解决方案. 路由 $routeProvider 异步加载js 路由的基本用法,请查看 ...

  3. Android RadioGroup 学习

    Api 参考地址 博文地址 RadioGroup相关属性: //返回该单选按钮组中所选择的单选按钮的标识 ID,如果没有选中的单选按钮则返回 -1. RadioGroup.getCheckedRadi ...

  4. 【BZOJ4005】[JLOI2015] 骗我呢(容斥,组合计数)

    [BZOJ4005][JLOI2015] 骗我呢(容斥,组合计数) 题面 BZOJ 洛谷 题解 lalaxu #include<iostream> using namespace std; ...

  5. pytest_01_安装和入门

    目录 pytest 安装与入门 1.pip install -U pytest 2.创建一个test01.py的文件 3.在该目录下执行pytest(venv) 4.执行多个,新建一个py文件 tes ...

  6. windows10配置virtualenv

    1.从官网下载pip:https://pypi.python.org/pypi/pip/,下载完成之后,解压到一个文件夹,用CMD控制台进入解压目录,输入:python setup.py instal ...

  7. nginx proxy文件编写总结

    upstream.conf upstream api { server 192.168.10.10:8080; server 192.168.10.20:8080;} server{ listen 4 ...

  8. PHP使用自定义key实现对数据加密解密

    // 加密 function encryptStr($str, $key){ $block = mcrypt_get_block_size('des', 'ecb'); $pad = $block - ...

  9. How To Install WildFly as a Service on Linux

    Installing WildFly as a service on Linux has multiple advantages like automatic start on system boot ...

  10. height、clientHeight、offsetHeight、scrollHeight、height()、 innerHeight()、outerHeight()等的区别

    1.height height是css属性,这个属性定义元素内容区的高度,在内容区外面可以增加内边距.边框和外边距. 当  box-sizing: content-box 时,高度应用到元素的内容框. ...