Python开发知识点总结之Python字符与字节新编
小职 2021-06-15 来源 :dongfanger 阅读 327 评论 0

摘要:本文主要介绍了Python开发知识点总结之Python字符与字节新编,通过具体的内容向大家展现,希望对大家Python程序开发的学习有所帮助。

本文主要介绍了Python开发知识点总结之Python字符与字节新编,通过具体的内容向大家展现,希望对大家Python程序开发的学习有所帮助。

字符

字符是一个信息单位,简单来讲就是一个字母、数字、标点符号、汉字等。

 

字符的最佳定义是Unicode字符:

 Python开发知识点总结之Python字符与字节新编

 

 

它是一个全球化的标准,能表示世界上所有语言的字符。Unicode字符的标识(码位)是以4~6个十六进制数字表示的,并且加前缀U+。

 

字节

字节是计算机信息计量单位,一个字节代表八个比特,存储的数值范围为0~255。

 

字节跳动(ByteDance)互联网公司的字节就是这个字节。

 

字节是机器的,字符是人类的。

 

把人类字符转换为机器字节时使用的算法叫做编码,反之叫做解码。

 

算法不同,字节与字符的关系也不同:

 Python开发知识点总结之Python字符与字节新编

 

 

bytes和bytearray

字节实际上是个二进制序列。不可变bytes类型和可变bytearray类型是用来存储二进制序列的,它们的示例如下:

 

>>> cafe = bytes("café", encoding="utf_8")

>>> cafe

b'caf\xc3\xa9'

>>> cafe[0]

99

>>> cafe[:1]

b'c'

>>> cafe_arr = bytearray(cafe)

>>> cafe_arr

bytearray(b'caf\xc3\xa9')

>>> cafe_arr[-1:]

bytearray(b'\xa9')

特别的是cafe[0]返回了整数,cafe[:1]返回了二进制序列,这是因为s[0] == s[:1]只对str类型成立,而对于其他类型来说,s[i]返回一个元素,s[i:i+1]返回一个相同类型的序列。

 

二进制序列实际上是整数序列。它们的字面量表示法包含ASCII字符(ASCII只能表示英文体系的字符),比如cafe的b'caf\xc3\xa9',具体规则是:

 

从空格到~的字符直接使用ASCII字符

制表符\t、换行符\n、回车符\r、转义符\\

其他字符用十六进制转义序列,比如\x00空字节

构建bytes和bytearray对象的方式有以下几种:

 

一个str对象和一个encoding关键字参数

一个可迭代对象,数值在0~255

一个实现了缓冲协议的对象,如bytes、bytearray、memoryview、array.array

memoryview和struct

memoryview允许在二进制数据结构之间共享内存,struct能从序列中提取结构化信息。

 

示例如下,提取一个GIF图像的宽度和高度:

 

import struct

 

with open("filter.gif", "rb") as fp:

    img = memoryview(fp.read())

 

# 这里不会复制字节序列,因为用的memoryview

header = img[:10]

print(bytes(header))  # b'GIF89a+\x02\xe6\x00'

 

# <是小字节序,3s3s是两个3字节序列,HH是两个16位二进制整数

# 类型、版本、宽度、高度

struct.unpack("<3s3sHH", header)  # (b'GIF', b'89a', 555, 230)

 

# 删除引用,释放memoryview实例所占的内存

del header

del img

小结

本文介绍了字符和字节的概念以及它们之间的关系,一个字符对应一个或多个字节。字符是人类的,字节是机器的,编码就是人类字符转换为机器字节,反之叫做解码。然后分别介绍了二进制序列的类型bytes和bytearray,和二进制序列的工具memoryview和struct。


我是小职,记得找我

✅ 解锁高薪工作

✅ 免费获取基础课程·答疑解惑·职业测评

Python开发知识点总结之Python字符与字节新编

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程