新手入门选择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


相关主题:
相关推荐
  1. 广州增城市明日之星中英文幼儿园 - 广州幼儿园黄页
  2. Python库使用教程
  3. 祥福中心幼儿园 - 成都市幼儿园黄页
  4. 深圳市龙华新区观澜办事处樟坑径社区观澜宝文幼儿园 - 深圳幼儿园黄页
  5. 事发武汉农夫山泉矿泉水内惊现大量虫卵
  6. 顾前不顾后
  7. 面包房里的猫
  8. 易中天给英雄武汉的一首诗 - 武汉新鲜事
  9. 深圳市罗湖区黄贝街道罗芳社区安芳幼儿园 - 深圳幼儿园黄页
  10. 湖北将发放消费券 - 武汉新鲜事
  11. 不分好赖的青蛙
  12. 武汉动物园火烈鸟孔雀排队打疫苗
  13. 代理技术详解 - HTTP代理,HTTPS代理及SOCKS 5代理
  14. 上海市浦东新区莲溪小学
  15. Ubuntu 18.04下极验证geetest安装导入失败解决办法
  16. 新世纪幼儿园 - 哈尔滨幼儿园黄页
  17. Javascript和Java的关系
  18. 江门市会城南园小学
  19. 温州市第七中学(温州市艺术学校)
  20. 警方通报:武汉男子持刀至五死一伤,嫌犯已跳桥
  21. Python公开课 - 数据抓取之Selenium使用(上)
  22. 冬爷爷
  23. 天津市北门东中学(天津市红桥区泰达实验中学)
  24. 深圳市光明新区公明办事处上村社区公明雅轩幼儿园 - 深圳幼儿园黄页
  25. 蜘蛛姑娘
  26. 小橡树幼儿园 - 石家庄幼儿园黄页
  27. 郑州市第五十七中学
  28. 武汉女子网上做兼职被骗六十五万
  29. 海口市美舍学校(小学)
  30. 武山县四门学区
  31. 武汉情智学校
  32. Ubuntu安装X11VNC实现远程可视化桌面简明教程
  33. 天津市大港区二号院小学
  34. Python源码剖析 - Python中的字符串对象
  35. 程序自动去除图片水印
  36. 一文看懂字符编码 - Unicode、UTF8、GBK、GB2312、ANSI和ASCII
  37. 抱抱熊找妈妈
  38. 恩城西安小学
  39. 小白兔变成了小黑兔
  40. 一壶浊酒难入喉 - 关于兔子先生
  41. 天津市宝坻区程泗淀中心小学
  42. 上海市浦东新区康桥第二幼儿园 - 上海幼儿园黄页
  43. 沈阳市苏家屯区金贝儿智慧园 - 沈阳幼儿园黄页
  44. 兖矿集团第二中学
  45. 沈阳市第三十五中学
  46. 仙游县度尾中学
  47. 郑州沪华国庆学校
  48. 武汉一女子七天被骗220万
  49. 枣庄市运河办西关小学
  50. 南京市下关区第二实验小学(下关二实小)
  51. 射手座的故事
  52. 邢台市第七中学
  53. 桶箍和桶片
  54. 武汉00后大二学妹拍视频月入七十万
  55. 辽宁省鞍山市小太阳双语幼儿园 - 鞍山幼儿园黄页
  56. 云浮市罗定中学
  57. 脱单!武汉的相亲角在哪你知道吗?
  58. 百名网媒总编辑登上知音号欣赏武汉夜色
  59. 青岛市书院路小学
  60. 蓝色猎鹰