Python的管理者把他们对Python新特性发展的注意力转移到了Python3.x系列上了。这意味着拍Python2系列除了会得到bug的修复和更新对于新的硬件和操作系统的版本的支持之外,不会再有对于语言和标准库的全新特征版本的发布。作者最初开发Python3的目的就是去除之前的Python版本中的出现的主要缺点并删除一些比较繁琐的东西。对标准库所做的最新的改进都只作用于Python3.x。
Python2.x和Python3.x之间的区别:
1. 函数的改变,例如print;
2. 很多API返回类型的改变,例如:dict的dict.keys(), dict.items() 和 dict.values() 返回“views”不在返回”lists”;
3. 部分函数的参数的改变和部分函数的删除,例如:builtin.sorted()不再接受cmp参数,__cmp__()已经不存在;
4. 变量类型的改变,例如:long在新版本中已经不存在,新版本中只有int
5. Pyhton3.x使用text和(binary)data代替之前版中的unicode和8位的strings
6. 语法的改变,例如as,with变成了保留字,新的Metaclass语法等
7. 语法的删除,例如:
1)去除了<>,全部改用!=
2)去除``,全部改用repr()
3)关键词加入as 和with,还有True,False,None
4)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量
5)去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数
8. 标准库的改变,很多老的模块已经删除,例如:gopherlib,md5;部分模块的名字已经改变
9. 异常的改变,例如:StandardError已经删除等
10. 操作符和特殊方法的改变,例如:__getslice__(),__setslice__(),__delslice__()等已经删除
11. 改变了顺序操作符的行为,例如x<y,当x和y类型不匹配时抛出TypeError而不是返回随即的 bool值。
12. 输入函数改变了,删除了raw_input,用input代替:
- Python2.X: guess = int(raw_input('Enter an integer : ')) # 读取键盘输入的方法
- Python3.X: guess = int(input('Enter an integer : '))
13. 扩展的可迭代解包。在Py3.X 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list 对象和seq是可迭代的。
14. 异常的改变
- 1)所以异常都从 BaseException继承,并删除了StardardError
- 2)去除了异常类的序列行为和.message属性
- 3)用 raise Exception(args)代替 raise Exception, args语法
15. 模块变动
1)移除了cPickle模块,可以使用pickle模块代替。最终我们将会有一个透明高效的模块。
2)移除了imageop模块
3)移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模块
4)移除了bsddb模块(单独发布,可以从http://www.jcea.es/programacion/pybsddb.htm获取)
5)移除了new模块
6)os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下
7)tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是 tokenize.tokenize()
以上只是列举了Python2.x和Python3.x之间的部分改变,还有很多未列出。总体上来说,做的改动非常大,但是我们可以通过2to3将Python2.x的代码转换成Python3.x。
Python3.x运行 pystone benchmark的速度比Python2.x慢30%。Guido认为Python3.x有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果。
Python3.x的个版本之间的主要更新:
通过查看Python3.x各版本的更新,可以看出更新主要集中在如下几个方面:
- 语法特征的增加
- 新的库模块的增加
- 新的内建特性
- 函数实现的改进和优化
- 库模块性能的提升,库模块的增加和删除
- C API的改变
- 安全性的改进
- CPython性能的改进
|