前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一技:Python的bytes型数据的迭代特征

一日一技:Python的bytes型数据的迭代特征

作者头像
青南
发布2019-07-10 15:04:51
2K0
发布2019-07-10 15:04:51
举报
文章被收录于专栏:未闻Code未闻Code

Bytes类型是Python 3引入的一个基本数据类型。调用Bytes类型的 .decode()方法可以把它变成Python 3的 str类型。调用 str类型.encode()方法,可以把它变成Bytes类型。

如果字符串只由Ascii中的符号组成,那么它转换为Bytes类型以后打印出来,“看上去”仅仅是前面多了一个 b而已,如下图所示:

但是如果字符串里面包含Ascii符号之外的其他符号,那么转换为Bytes类型以后,就变得不一样了,如下图所示:

其中在Ascii符号以外的字符,会被编码为很多的十六进制值。

并且,即使是仅有Ascii字符,Bytes型数据的迭代特性也与字符串不一样。

  1. 当我们使用for循环展开字符串时,得到的是每一个字符,如下图所示:
  • 当我们使用for循环展开Bytes对象时,得到的是很多的Ascii编码,如下图所示:

这些编码实际上可以直接使用 chr转换为对应的字符,如下图所示:

  • 使用下标取某一个字符时,字符串能直接获取对应的符号,但Bytes类型只能获取到Ascii编码,例如:
  • 使用切片时,字符串和Bytes类型又都能得到对应的字符,如下图所示:
  • 对于中文或者其他非Ascii字符的符号,无论是用索引还是切片,都看不到原来的字符:

在Python 3里面,不少操作获取的都是Bytes型的数据,例如base64.b64decode()的输出结果、例如redis-py这个库从Redis中读取的数据……

所以在实际使用中,一定要分清楚当前数据是不是Bytes型,以免因为它的迭代行为与字符串不一致导致问题。

最后,不要因为Bytes型数据在迭代的时候不方便就讨厌它。这个数据类型有非常重要的作用。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档