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 表达方式不同么?不就是在编码上有些区别吗?为什么要出现一个两个不兼容的大版本呢?

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

字符串和二进制数据在 Python2 中的含义相同,在《Zen of Python》中有个原则,"there should be one -- and preferably only one -- obvious way to do it",显然Python2 违背了这条原则。

Python2 对 Unicode 的支持不友好,Python 对自己的定位是世界上所有人都能方便使用,而默认以 Unicode 编码方式来开发代码文本,更加更合适。

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

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

运行环境不支持 - 某些在封闭的开发环境下,并不支持新安装Python3,例如CentOS的某些版本。

依赖库不支持 - 某些项目用 Python2 开发,处于维护阶段,依赖库尚未支持Python3版本,如果强行迁移会产生较大的工作量和未知风险。

参考资料

5. 更多内容

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

python2好还是python3好-新手入门选择Python2还是Python3相关推荐

  1. 新手前端练手网站_编程到底难不难学?新手入门选择哪种语言好?

    以下内容适合的读者:想要学习编程的小白 一.编程到底难不难学? 对于这个问题我的回答是不知道,学会了编程的人会说好学,中途就放弃的人会说很难,任何知识想要掌握好都不是一件容易的事情.所以我决定用自己的 ...

  2. python3数据科学入门与实战_Python3学习之Python3数据科学入门与实战视频教程

    Python3学习之Python3数据科学入门与实战视频教程 Python3数据科学入门与实战 这是一个数据驱动的时代,想要从事机器学习.人工智能.数据挖掘等前沿技术,都离不开数据跟踪,本课程通过Nu ...

  3. Python2.x 和 Python3.x,如何选择?

    一.前言 Python 软件基金会宣布,到 2020 年元旦,将不再为编程语言 Python 2.x 分支提供任何支持.这一天将标志着一出延续多年的戏剧的高潮:Python 从较旧的.功能较弱的.广泛 ...

  4. java 排序 1和1_新手入门-冒泡排序和选择排序第一节排序1.1排序概述排序(

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 新手入门-冒泡排序和选择排序 第一节排序 1.1排序概述 排序(sorting)的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列.  ...

  5. 左手Python2 右手Python3,我该选择谁?

    python2和python3有什么区别? 1.性能 Py3.0运行 pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可 以 ...

  6. linux deepin 入门,Linux新手的选择:Deepin(深度操作系统)

    对于刚刚开始Linux学习生涯的新手来说,上百款让人眼花缭乱的Linux发行版中,Deepin无疑是最合适的的那一款.可能有人会问,为什么不是Ubuntu?毫无疑问的是,Ubuntu是一款极为优秀的L ...

  7. GD32F103RCT6 MINI板综合开发教程(新手入门必备选择)

    前一段时间,抽了点空闲时间做了两块学习板,帮助新手入门,很多人希望能做一款比较全面应用的开发板,能够尽快学习国产芯片,现在,它来了... 接口说明: 设计图片: 尺寸图: 实际设计: 资料包: 程序注 ...

  8. 给伸手党的福利:Python新手入门引导

    不知道你们有没有与我同样的经历,下定决心要学Python,也制定了21天的自学Python学习计划(都说21天是养成一个好习惯的最佳周期,结果第一个21天就从收集资料,直接到放弃.)收集的视频等资源放 ...

  9. python pip-什么是pip?Python新手入门指南

    什么是 pip ?pip 是 Python 中的标准库管理器.它允许你安装和管理不属于 Python标准库 的其它软件包.本教程就是为 Python 新手介绍 pip. 通过本教程,你将学到: 1. ...

最新文章

  1. 一个QQ多用户登陆的实例代码
  2. ASP.NET编程中常用到的27个函数集
  3. iTerm2 都不会用,还敢自称老司机?
  4. visual studio 2005占用cpu100% -_-...
  5. 关于手机端CSS Sprite图标定位的一些领悟
  6. 2015年国民经济和社会发展统计公报
  7. 什么是高精准IP地址定位——IP问问
  8. matlab uicontrol 居中,在uicontrol属性中position设置问题?
  9. 千万别把WIFI玩坏了!关于WIFI的新鲜玩法和商业模式探讨
  10. android SDK introduce
  11. mips中的li_MIPS学习笔记(一)
  12. Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(九十二)
  13. 电脑蓝牙耳机,蓝牙耳机,详细教您蓝牙耳机怎么连接电脑
  14. Android Studio导入外部资源的三种方式
  15. BART 文本摘要示例
  16. Dubbo-06 20190320
  17. 2019牛客暑期多校训练营(第七场)D Number——实系数多项式因式分解定理
  18. Codewars刷题升级 (Python)5Kyu Pete, the baker 皮特,面包师
  19. 快来给你的Hexo博客招募亿只live2d看板娘吧(๑•̀ㅂ•́)و✧
  20. 拓嘉启远:拼多多虚拟产品相关分享

热门文章

  1. Codeforces791:Ordinary Numbers题解
  2. Linux防火墙命令
  3. ST表 (模板) 洛谷3865
  4. JavaScript有限状态机实现方式
  5. Tomcat学习过程
  6. 字符串按长度转换成数组
  7. Error: Could not access the Package Manager. Is the system running?
  8. 40个方法优化你的PHP
  9. WildFly 报错 java.lang.NoClassDefFoundError
  10. Docker:学习笔记(1)——基础概念