Python公开课 - 新项目选择Python2还是Python3
前言
目前Python有两个主要版本,一个是Python2.x,另一个是Python3.x。
小T老师最早接触Python的时候,使用的是Python2.3,回想起来也蛮久远的事情了。
有很多成熟的产品和项目也是基于Python2.x来开发,并且一直在维护,搜狐的个人邮箱就是采用Python2.x版本来开发。
Python2.x和Python3.x的区别
在项目进行选择的时候,这是一个重要点,所以我们必须要弄清楚。
Short version: Python 2.x is legacy, Python 3.x is the present and future of the language
以上是摘录于wiki.python.org的一段话。
Python3.0在2008年就发布出来,而2.7作为2.X的最终版本并继续维护。
Guido van Rossum的想法是不在对2.7版本进行向后兼容。
Python3.x最显着的改进是更好的Unicode支持,所有文本字符串默认为Unicode。
Python3.x的主要变化
兔子先生整理了一些基本的改变:
编码方式和性能
- 运行效率更快
- 默认源文件编码ASCII变为UTF-8,以前文件前加入的coding=utf-8不再需要
- 针对unicode的处理有了明显的改善,效率明显提升
数据类型和基本运算
- int和long进行了统一,统一为int
- True、False、None都是关键词
- 必须以b'...'表示二进制数据,可以使用u'..'表示字符串,不加u也表示字符串
- 移除<>不等号,使用“!=”表示不等号关系
- 调整除法符号‘/’的用法,只返回浮点数,要返回整数要使用“//”
- 具有单一的str类型,其类型相当于2.x的unicode,3.x所有的字符串都是unicode
range和dict的变化
- 在2.x中,range相比xrange会创建一个列表。常出现在for循环、字典、列表中,但是3.x中xrange改名为range,在3.x中使用用xrange会触发错误。同时range返回的是可迭代对象而不再是列表形式,要想使range的结果得到一个list数据必须要使用list(range(5))
- dict.iterkeys(), dict.itervalues(), dict.iteritems()被keys() and values() and items()所替代他们的返回结果类似于集的可迭代对象,而不是键值对的列表。从而在不进行键和值条目复制的情况下就能对其执行set操作
迭代器
- range在python3中返回颗迭代对象二不是列表,最大限度节约内存
- zip(),map(),filter(),key(),value()返回的均是可迭代对象
应该选择哪个版本
兔子先生建议,能使用3.x则尽量使用。但是有以下情况可以考虑使用2.x:
- 环境不支持 - 例如在封闭的开发环境下,并不支持新安装Python3.x,例如CentOS的某些版本
- 依赖库不支持 - 毕竟2.x下面有更多更丰富的第三方库,其中有些尚未迁移到新的版本上来,对现有项目会造成阻碍或者产生较大的工作量
相关阅读
展开剩余53%