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异常学习笔记
Feb 03 Python
Python 使用SMTP发送邮件的代码小结
Sep 21 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
Apr 18 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
Django自定义全局403、404、500错误页面的示例代码
Mar 08 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
python打开音乐文件的实例方法
Jul 21 Python
使用Python画了一棵圣诞树的实例代码
Nov 27 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 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 array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
用php实现百度网盘图片直链的代码分享
2012/11/01 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2010/02/04 Javascript
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
基于JQUERY的两个ListBox子项互相调整的实现代码
2011/05/07 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
javascript五图轮播切换实用版
2012/08/17 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
2013/12/11 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
Javascript实现的StopWatch功能示例
2017/06/13 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
2020/08/08 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
详解python发送各类邮件的主要方法
2016/12/22 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
学校安全教育制度
2014/01/31 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
顶碗少年教学反思
2014/02/21 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
道歉信怎么写
2015/05/12 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
比较node.js和Deno
2021/04/27 Javascript
如何解决php-fpm启动不了问题
2021/11/17 PHP