一、基本语法
1、python3默认编码
Python2 的默认编码是 asscii,这也是导致 Python2 中经常遇到编码问题的原因之一,至于是为什么会使用 asscii 作为默认编码,原因在于 Python这门语言诞生的时候还没出现 Unicode。Python 3 默认采用了 UTF-8 作为默认编码,因此你不再需要在文件顶部写 # coding=utf-8 了。
2、迭代器
在 Python2 中很多返回列表对象的内置函数和方法在 Python 3 都改成了返回类似于迭代器的对象,因为迭代器的惰性加载特性使得操作大数据更有效率。Python2 中的 range 和 xrange 函数合并成了 range,如果同时兼容2和3,可以这样:
另外,字典对象的 dict.keys()、dict.values() 方法都不再返回列表,而是以一个类似迭代器的 "view" 对象返回。高阶函数 map、filter、zip 返回的也都不是列表对象了。Python2的迭代器必须实现 next 方法,而 Python3 改成了 __next__
In [1]: testd={'11':'22','33':'44'}
In [2]: testd.keys()
Out[2]: dict_keys(['11', '33'])
3、print不再是语句,而是函数
比如原来是 print 'abc' 现在是 print('abc')
但是 python2.6+ 可以使用 from __future__ import print_function 来实现相同功能。
4、原来1/2(两个整数相除)结果是0,现在是0.5了
$ /opt/python3.6/bin/python3
Python 3.6.2 (default, Aug 4 2017, 10:27:08)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 1/2
0.5
>>> 1/3
0.3333333333333333
5、新的字符串格式化方法format取代%
6、python3 彻底废弃了 long+int
统一为 int , 支持高精度整数运算
7、
二、数据类型
1、字符串
三、模块化编程
1、增加了一些新模块
concurrent.futures、venv、unittest.mock、asyncio、selectors、typing
2、去掉了一些模块或者函数
gopherlib、md5、contextlib.nested、inspect.getmoduleinfo等。
去掉的内容的原因主要是2点:
1. 过时的技术产物,已经没什么人在用了;
2. 出现了新的替代产物后者被证明存在意义不大。理论上对于开发者影响很小。
3、模块名称修改
把一些相关的模块合并到同一个包里面,如: