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搭建简易服务器分析与实现
Dec 15 Python
python数据结构之二叉树的统计与转换实例
Apr 29 Python
Python函数式编程指南(四):生成器详解
Jun 24 Python
python各种语言间时间的转化实现代码
Mar 23 Python
实例解析Python中的__new__特殊方法
Jun 02 Python
python使用pymysql实现操作mysql
Sep 13 Python
python绘制圆柱体的方法
Jul 02 Python
简单了解为什么python函数后有多个括号
Dec 19 Python
keras和tensorflow使用fit_generator 批次训练操作
Jul 03 Python
python 用Matplotlib作图中有多个Y轴
Nov 28 Python
python turtle绘制多边形和跳跃和改变速度特效
Mar 16 Python
Python数据结构之队列详解
Mar 21 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
利用PHP创建动态图像
2006/10/09 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
js 操作css实现代码
2009/06/11 Javascript
extjs 04_grid 单击事件新发现
2012/11/27 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
javascript实现手机震动API代码
2015/08/05 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
2017/02/19 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
React注册倒计时功能的实现
2018/09/06 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
Vue实现购物车详情页面的方法
2019/08/20 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
python虚拟环境virtualenv的使用教程
2017/10/20 Python
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
C语言编程题
2015/03/09 面试题
学校联谊活动方案
2014/02/15 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
《搭石》教学反思
2016/02/18 职场文书
python元组打包和解包过程详解
2021/08/02 Python
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python