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

作者:Huoty 时间:2023-10-11 01:02:18 

一、版本对比

首先要说的是,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 偷偷的混在一起,使得两者的区别更加明显。

总结

标签:python2,python3,编码
0
投稿

猜你喜欢

  • 如何卸载python插件

    2023-11-21 22:24:31
  • Python中文分词库jieba(结巴分词)详细使用介绍

    2023-03-17 10:31:35
  • 请给PNG8一个机会:对png8的误解

    2009-09-21 10:45:00
  • PHP+Ajax简单get验证操作示例

    2024-05-13 09:24:27
  • python学生信息管理系统实现代码

    2023-10-31 06:18:10
  • asp实现页面延迟运行的两个简单方法

    2007-10-16 13:49:00
  • pytorch网络模型构建场景的问题介绍

    2022-07-24 22:38:42
  • seo网站如何实现301跳转?

    2010-01-15 12:59:00
  • python基本算法之实现归并排序(Merge sort)

    2023-04-06 03:20:07
  • border:none;与border:0;的区别

    2009-11-27 19:04:00
  • Sun正式发布MySQL 5.1版 简化数据库应用

    2008-12-11 15:15:00
  • 为什么在MySQL中不建议使用UTF-8

    2024-01-25 17:53:29
  • js的flv视频播放器插件使用方法

    2024-04-27 15:18:17
  • mysql5.7.19 安装配置方法图文教程(win10)

    2024-01-16 03:52:10
  • 如何在Linux 系统中使用apt 包管理器安装 Git LFS

    2022-08-29 15:33:30
  • python制作websocket服务器实例分享

    2023-02-20 00:00:29
  • Mysql的Binlog数据恢复:不小心删除数据库详解

    2024-01-18 21:23:29
  • 原生JS实现左右箭头选择日期实例代码

    2023-08-06 04:55:27
  • python从sqlite读取并显示数据的方法

    2022-08-27 22:46:24
  • python多线程之事件Event的使用详解

    2022-12-21 11:46:10
  • asp之家 网络编程 m.aspxhome.com