新手入门选择Python2还是Python3

1. 前言

Python的发展很快,几乎每年都在版本迭代。目前Python有两个主要版本,一个是python2.x,另一个是python3.x。

兔子先生最早接触Python的时候,使用的是python2.3,用来做垂直领域的爬虫开发。

2. Python2与Python3的主要区别

Python2 与 Python3 的区别很多,但是总的来说有以下几点:

2.1 Python3 是发展趋势,Python2不再维护

Short version: Python 2.x is legacy, Python 3.x is the present and future of the language

以上是摘录于wiki.python.org,龟叔 (Guido van Rossum) 的想法是不再对2.7版本进行向后兼容。

目前 Python2 发展普及了十多年,在一些公司的IT建设项目上,占据不小的分量,例如搜狐的个人邮箱,就是采用 Python2.6 开发并一直维护。

尽管 Python2 有如此辉煌的过去,但是由于 Python 社区的推荐和 更多 Python3 拥护者的出现,越来越多的企业转投 Python3 的怀抱并已经开始行动。

2.2 Python2 与 Python3 的库不兼容

Python2 与 Python3 本身并不兼容,这种情况下,对于库的选择和使用会让人抓狂。因为版本不兼容,很容易引起程序运行异常,甚至直接崩溃。

那么我们该如何解决这个问题呢,其实当选择使用这个库的之前,可以先了解它支持在哪些 Python 版本上运行。

举例来说, requests 当前的最新版本为 2.23.0,在 https://pypi.org/project/requests/ 上的在线文档上,清楚说明了兼容Python2.7,Python3.5-Python3.8 的版本,所以如果你的 Python 版本在上述的范围内,则可以放心使用。

2.3 Python3 对unicode支持更好

Unicode 和 ASCII 相比,可以支持更多的语言符号,例如罗马字母、中日韩文、Emoj 表情等。

在 Python3 中字符串默认是 Unicode 的编码,而 Python2 则是默认 ASCII 码,如果要指定为 Unicode 则需要在字符串前加个 u 作为前缀。

#--------------------------------
#python2 中字符串编码示例

# 默认为 ASCII 码
xtuz_url = 'https://www.xtuz.net'

# 显示指定为 Unicode 码
xtuz_url = u'https://www.xtuz.net'


#---------------------------------
#python3 中字符串编码示例

xtuz_url = 'https://www.xtuz.net'

2.4 Python3 优化了整数的除法

在 Python2 中,整数相除的情况下,即使有结果含有小数,也会丢弃,仅取整数处理。

例如:

Python 2.7.17 (default, Nov  7 2019, 10:07:09) 
[GCC 7.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 10/3
3
>>> print 11/3
3

在 Python3 中,上述情况则会自动转换成浮点数处理。从开发者的角度来看,这样的结果更直观。

Python 3.6.8 (default, Jan 14 2019, 11:02:34) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print (10/3)
3.3333333333333335
>>> print (11/3)
3.6666666666666665

2.5 print 语法的调整

Python3 中为了统一函数的表达方式,对 print 表达式进行了调整,必须要求有 ()

## python2中的输出方式
print 'https://www.xtuz.net'

## python3中的输出方式
print('https://www.xtuz.net')

3. Python3取代Python2的原因

我们了解 Python2 与 Python3 的主要区别后,会不会感觉不就是 print 表达方式不同么?不就是在编码上有些区别吗?为什么要出现一个两个不兼容的大版本呢?

兔子先生在搜索了相关资料,总结来说有两个主要原因:

  1. 字符串和二进制数据在 Python2 中的含义相同,在《Zen of Python》中有个原则,"there should be one -- and preferably only one -- obvious way to do it",显然Python2 违背了这条原则。
  2. Python2 对 Unicode 的支持不友好,Python 对自己的定位是世界上所有人都能方便使用,而默认以 Unicode 编码方式来开发代码文本,更加更合适。

4. 新手入门如何选择正确的版本

兔子先生建议,能使用 Python3 则尽量使用。但是有以下情况可以考虑使用 Python2:

  • 运行环境不支持 - 某些在封闭的开发环境下,并不支持新安装Python3,例如CentOS的某些版本。
  • 依赖库不支持 - 某些项目用 Python2 开发,处于维护阶段,依赖库尚未支持Python3版本,如果强行迁移会产生较大的工作量和未知风险。

5. 参考资料

6. 更多内容

原文来自兔子先生网站:https://www.xtuz.net/detail-131.html

查看原文 >>> 新手入门选择Python2还是Python3

如果你对Python语言感兴趣,可以关注我,或者关注我的微信公众号:xtuz666


相关主题: