Python 2与Python 3版本和编码的对比


Posted in Python onFebruary 14, 2017

一、版本对比

首先要说的是,Python的版本,目前主要分为两大类:

Python 2.x的版本的,被称为Python2:是目前用的最广泛的,比如Python 2.7.3。

Python 3.x的版本的,被称为Python3:是最新的版本的,比如Python 3.1。长远来看,也算是以后的趋势。

【Python2和Python3之间的区别】

1.从Python2到Python3,很多基本的函数接口变了,甚至是,有些库或函数被去掉了,改名了

     Python2和Python3,在很多基本的,最常用的函数方面,接口都变了,最典型的就要数大家最常用的print函数了。

2.第三方库的支持方面,目前来说,还是Python2支持的最好,Python3支持的不太够

     Python强大的原因之一是第三方的库很多,功能很强大。

     而目前很多Python的第三方的库,很多只提供Python2的。

     或者是即使提供了Python3的,但是也不一定很成熟。

二、编码对比

在 Python 中,不论是 Python2 还是 Python3 中,总体上说,字符都只有两大类:

  1. 通用的 Unicode 字符;
  2. (unicode 被编码后的)某种编码类型的字符,比如 UTF-8,GBK 等类型的字符。

Python2 中字符的类型:

  • str: 已经编码后的字节序列
  • unicode: 编码前的文本字符

Python3 中字符的类型:

  • str: 编码过的 unicode 文本字符
  • bytes: 编码前的字节序列

我们可以认为字符串有两种状态,即文本状态和字节(二进制)状态。Python2 和 Python3 中的两种字符类型都分别对应这两种状态,然后相互之间进行编解码转化。编码就是将字符串转换成字节码,涉及到字符串的内部表示;解码就是将字节码转换为字符串,将比特位显示成字符。

在 Python2 中,str 和 unicode 都有 encode 和 decode 方法。但是不建议对 str 使用 encode,对 unicode 使用 decode, 这是 Python2 设计上的缺陷。Python3 则进行了优化,str 只有一个 encode 方法将字符串转化为一个字节码,而且 bytes 也只有一个 decode 方法将字节码转化为一个文本字符串。

Python2 的 str 和 unicode 都是 basestring 的子类,所以两者可以直接进行拼接操作。而 Python3 中的 bytes 和 str 是两个独立的类型,两者不能进行拼接。

Python2 中,普通的,用引号括起来的字符,就是 str;此时字符串的编码类型,对应着你的 Python 文件本身保存为何种编码有关,最常见的 Windows 平台中,默认用的是 GBK。Python3 中,被单引号或双引号括起来的字符串,就已经是 Unicode 类型的 str 了。

对于 str 为何种编码,有一些前提:

  1. Python 文件开始已经声明对应的编码
  2. Python 文件本身的确是使用该编码保存的
  3. 两者的编码类型要一样(比如都是 UTF-8 或者都是 GBK 等)

这样 Python 解析器才能正确的把文本解析为对应编码的 str。

总体来说,在 Python3 中,字符编码问题得到了极大的优化,不再像 Python2 那么头疼。在 Python3 中,文本总是 Unicode, 由 str 类型进行表示,二进制数据使用 bytes 进行表示,不会将 str 与 bytes 偷偷的混在一起,使得两者的区别更加明显。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python中SOAP项目的介绍及其在web开发中的应用
Apr 14 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
django的csrf实现过程详解
Jul 26 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
Nov 29 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
关于Tensorflow分布式并行策略
Feb 03 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
Feb 03 Python
tensorflow 实现从checkpoint中获取graph信息
Feb 10 Python
python实现猜拳游戏
Mar 04 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
Jan 30 Python
Python第三方库安装缓慢的解决方法
Feb 06 Python
利用Python爬虫给孩子起个好名字
Feb 14 #Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
Feb 14 #Python
让python 3支持mysqldb的解决方法
Feb 14 #Python
python用装饰器自动注册Tornado路由详解
Feb 14 #Python
利用python程序生成word和PDF文档的方法
Feb 14 #Python
Python中类型检查的详细介绍
Feb 13 #Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
Feb 13 #Python
You might like
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
PHP中的密码加密的解决方案总结
2016/10/26 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
Python中调用其他程序的方式详解
2019/08/06 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
纯CSS3发光分享按钮的实现教程
2014/09/06 HTML / CSS
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
Collection和Collections的区别
2016/05/02 面试题
酒店led欢迎词
2014/01/09 职场文书
2015年元旦文艺汇演主持词
2014/03/26 职场文书
外语系毕业生求职自荐信
2014/04/12 职场文书
党员群众路线承诺书
2014/05/20 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
国富论读书笔记
2015/06/26 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python
小程序自定义轮播图圆点组件
2022/06/25 Javascript