Python 2.x和Python 3.x,初学者应如何选择?

Python 自发布以来,主要有 3 个版本,分别是:
  1. 1994 年发布的 Python 1.0 版本(已过时);
  2. 2000 年发布的 Python 2.0 版本,截止到 2019 年 3 月份,已经更新到 2.7.16;
  3. 2008 年发布的 Python 3.0 版本,截止到 2019 年 3 月份,已经更新到 3.7.3;

3 个版本中,Python 3.0 是一次重大的升级,为了避免引入历史包袱,Python 3.0 没有考虑与 Python 2.x 的兼容,这也就导致很长时间以来,Python 2.x 的用户不愿意升级到 Python 3.0。

除此之外,造成目前这种状况的另一个原因是,将现有应用从 Python 2.x 迁移到 Python 3.x 是一项不小的挑战。虽然有 2to3(后续会介绍)之类的工具可以进行代码的自动转换,但无法保证转换后的代码 100% 正确。而且,如果不做人工修改的话,转换后的代码性能可能还不如转换前。因此,将现有的复杂代码库迁移到 Python 3.x 上可能需要付出巨大的精力和成本,某些公司无法负担这些成本。

目前,根据统计显示,使用 Python 2.x 的开发者仍占 63.7%,而Python 3.x 的用户占 36.3%,由此可见,使用 Python 2.x 的用户还是占多数。在 2014 年,Python 创始人宣布,将 Python 2.7 支持时间延长到 2020 。

那么,初学者应该选择什么版本呢?本教程建议大家选择 Python 3.x 版本,理由有以下几点:
  • 使用 Python 3.x 已经是大势所趋
    目前,虽然使用 Python 2.x 的开发者居多,但使用 Python 3.x 的开发者正在迅速增加,如图 1 所示:

    Python 3.x 是大势所趋
    图 1 Python 3.x 是大势所趋
     
    另外,根据 PEP-404 这份文档,Python 2.x 版本将不会再发布 2.8 版本,且未来非常重要的项目(如 Django、Flask 和 Numpy)可能都将放弃对 2.x 的支持,仅支持 Python 3.x。因此,从长远来看,学习 Python 3.x 只有好处。
    本教程也是以 Python 3.x 来介绍 Python 编程,因此,为了同步,强烈建议初学者选择 Python 3.x。
  • Python 3.x在 Python 2.x 的基础上做了功能升级
    Python 3.x 对 Python 2.x 的标准库进行了一定程序的重新拆分和整合,比 Python 2.x 更容易理解,特别是在字符编码方面。Python 2.x 中对于中文字符串的支持性能不够好,需要编写单独的代码对中文进行处理,否则不能正确显示中文,而 Python 3.x 已经将该问题成功解决了。
  • Python 3.x 和 Python 2.x 思想基本是共通的
    Python 3.x 和 Python 2.x 思想基本上是共通的,只有少量的语法差别,学会的 Python 3.x,只要稍微花点时间学习 Python 2.x 的语法,即可灵活运用这两个不同版本了。
     
注意,选择 Python 3.x 也不是没有弊端,很多扩展库的发行总是会滞后于 Python 的发行版本,甚至目前还有很多库不支持 Python 3.x。

因此,在选择 Python 时,一定要先考虑清楚自己的学习目的,比如说,打算做哪方面的开发,此方向需要用法哪些扩展库,以及这些扩展库支持的最高 Python 版本等,明确这些问题后,再选择适合自己的版本。

关于 Python 3.x 和 Python 2.x 具体的区别,可阅读《Python 3 和 Python 2 区别》一节。


推荐文章
清空输入缓冲器,C语言清空输入缓冲区完全攻略

本节,在学习如何清空输入缓冲区之前,我们先来介绍一下“输入缓冲区”的概念。 输入缓冲区 所有从键盘输入的数据,不管是字符还是数字,都是先存储在内存的缓冲区中,叫作“键盘输入缓冲区”,简称“输入缓冲区

网络映射什么意思?

网络映射是指网络端口映射,即将外部主机的IP地址的一个端口映射到Intranet中的计算机,提供相应的服务。扩展资料:映射网络驱动器的方法:1、打开一个文件夹,点击上方的映射网络驱动器。2、输入文件夹

Java println(Stringmessage) message:一条日志或追踪信息。 示例 DriverManager.println("获取驱动成功!");

C++多态到底是什么(通俗易懂)

派生类对象的地址可以赋值给基类指针。对于通过基类指针调用基类和派生类中都有的同名、同参数表的虚函数的语句,编译时并不确定要执行的是基类还是派生类的虚函数;而当程序运行到该语句时,如果基类指针指向的是一

Android HTTP通信

Android系统提供的网络编程方式基于Java语言,Java语言提供的网络编程方式在Andriod中都提供了支持。 具体的编程方式包括:针对TCP/IP协议的Socket、ServerSocket

Go语言使用定时器实现任务队列

Go语言中提供了两种定时器timer和ticker,分别是一次性定时器和重复任务定时器。本节咱们主要介绍如何使用Go语言的定时器实现一个任务队列,非常具有实用价值。 Go语言中定时器 一般用法:

网页优化最为重要的内容是什么?

网页优化中最重要的是如何挑选关键字关键字(Keyword)或关键字段(keyphrase),就是顾客输入搜索框中的文字,也就是顾客命令搜索引擎寻找的东西。【为网页定位关键字】如何挑选关键字是网页优化中

David Silver策略梯度算法及实际应用(实现Pong游戏)

到目前为止,策略梯度是最常用的RL算法之一。研究表明,经过适当的调整,它们的性能要优于DQN,同时内存和计算消耗又不会过高。与Qlearning不同,策略梯度使用参数化策略,可以在无须价值函数的情况下

二维数组的定义、初始化和输出,C语言二维数组详解

本节学习二维数组。二维数组与一维数组相似,但是用法上要比一维数组复杂一点。后面的编程中,二维数组用得很少,因为二维数组的本质就是一维数组,只不过形式上是二维的。能用二维数组解决的问题用一维数组也能解决

Java Float类

Float类在对象中包装了一个基本类型float的值。Float类对象包含一个float类型的字段。此外,该类提供了多个方法,能在float类型与String类型之间互相转换,同时还提供了处理floa

python怎么判断输入的值是否为数字?

python怎判断输入的值是否为数字的方法1、输入时判断通过格式化操作符(%)%s:string(字符串)型%d:int(整数)型%f:float(浮点数)型name=input("mane:") a

Linux memcache安装和配置(自启动)过程详解

memcache是一个高性能的分布式的内存对象缓存系统,通过在内存中维护一张统一的、巨大的Hash表,它能够用来存储各种格式的数据,包括图像、视频、文件及数据库检索的结果等。简单地说就是将数据调用到内

Go语言defer(延迟执行语句)

Go语言的defer语句会将其后面跟随的语句进行延迟处理,在defer归属的函数即将返回时,将延迟处理的语句按defer的逆序进行执行,也就是说,先被defer的语句最后被执行,最后被defer的语句

Django项目创建第一个应用

Django项目就是基于Django框架开发的Web应用,它包含了一组配置和多个应用,我们把应用称之为App,在前文中对它也做了相应的介绍,比如auth、admin,它们都属于APP。 一个App就

C语言数组指针和指针数组

在许多C程序中,指针常被用于引用数组,或者作为数组的元素。指向数组的指针常被简称为数组指针(arraypointer),而具有指针类型元素的数组则被称为指针数组(pointerarray)。 数组指

JS scrollLeft和scrollTop属性:读写元素左侧和顶部已滚动的距离

在JavaScript中,使用scrollLeft和scrollTop可以读写移出可视区域外面的宽度和高度,具体说明如下: scrollLeft:读写元素左侧已滚动的距离,即位于元素左边界与元素中

网站权重是怎么回事?

权重值是搜索引擎对网站页面重要性的评价指标,不同的搜索引擎都拥有自己的权重名称,如谷歌PR(PageRank)、百度BR(BaiduRank)、搜狗SR(SogouRank)等。 影响权重的因素包含

RT-thread是什么样的操作系统?

RT-thread是一个集内核、中间件组件于一体的实时操作系统(RTOS),由熊谱翔先生带领并集合开源社区力量开发而成,具有极小内核、稳定可靠、简单易用、高度可伸缩、组件丰富等特点。RT-Thread

Python MRO方法解析顺序详解

我们知道,Python类是支持(多)继承的,一个类的方法和属性可能定义在当前类,也可能定义在基类。针对这种情况,当调用类方法或类属性时,就需要对当前类以及它的基类进行搜索,以确定方法或属性的位置,而搜

C语言指针作为参数和返回值

C语言本质上是传值调用(callbyvalue)的语言,因为函数的形参都是局部变量,它们通过传入的实参进行初始化。 C语言的优点是,只要表达式的类型适当,就可以当作实参。另一方面,缺点是在启用函数时