1、源码的区别 py2x:源码比较混乱,重复代码较多,冗余 py3x: 源码崇尚优美,代码清晰简单
2、用户交互的区别:
- Python 2.x 中,
- raw_input 会将所有输入的数据当作字符串看待,返回值为字符串类型。
- input
输入时必须是一个合法的 Python 表达式,格式与 Python 中的代码一样,其返回值与输入的数据类型相同。
- 如果是 Python 2.x
版本,那么 input 和 raw_input 都可以使用。
- Python 3.x 中
- 只能使用 input返回值为str。因此,建议都使用
input 函数。
3、print的区别:
- python2x中,print时加()或者加引号"",print是个语句。
- python3x中,print时必须加(),print变成了函数。
4、默认编码的区别:
- Python 2.x 中,默认使用 ASCII编码,Python 2.x默认是不支持中文的,且变量命名只能用英文。要想支持中文,需要在首行加上: # -*-coding:UTF-8 -*-。
- Python
3.x 中,默认使用 UTF-8的编码,所以 Python 3.x 默认是支持中文的,且变量命名能够使用中文。如果在 Python
文件中不用指定头信息 # -*-coding:utf-8-*-。
5、类的区别:
- python2.x中,类没有继承object的都是经典类遵循深度优先算法,继承object才是新式类,遵循广度优先算法。
- python3.x中,所有类都是新式类,遵循广度优先算法,有mro方法。
6、super()的区别:
- 首先python2.x和python3.x中都有super()方法
- python2.x中,类中有super方法,但是必须传参数(子类名,子类对象)
- python3.x中,的类中是直接调用无序传参
7、Ture和False 的区别:
- python2.x中,True 和 False 在 Python2 中是两个全局变量,可以为其赋值或者进行别的操作, 初始数值分别为1和0,虽然修改是违背了python设计的原则,但是确实可以更改.
- python3.x中,修正了这个变量,True或False不可变,不可以重新赋值。
8、迭代器的区别:
- python2.x中,许多返回列表的方法,如range,字典对象的 dict.keys()、dict.values() 方法, map、filter、zip; 并且迭代器必须实现next方法
- python3.x中,将返回列表的方法改为了返回迭代器对象,内置了__next__,不用特意去实现next
9、xrange函数
xrange 可以生成序列。 - 在 Python3.x 中,取消了 xrange 函数,而使用 range 完全代替了 xrange 函数。在 Python 3.x 中调用 xrange 函数会报错。
- 在 Python2.x 中,xrange() 函数用法与 range() 函数完全相同,所不同的是生成的不是一个列表,而是一个生成器。
10、nonlocal的区别:
- Python2.x中,没有nonlocal,没有办法在嵌套函数中将变量声明为一个非局部变量,只能在函数中声明全局变量,字符串区别: py2x: unicode类型表示字符串序列,str类型表示字节序列
- Python3.x中,nonlocal将变量声明为一个非局部变量 11,字符串区别: py3x: str类型表示字符串序列,byte类型表示字节序列
12、除法的变化
- 在Python
2.x中,对于/算法,整数相除的结果是一个整数,它会把小数部分完全忽略掉,浮点数除法会保留小数点的部分,得到一个浮点数的结果。
- 在Python
3.x中,/除法不再这么做了,整数相除的结果也会是浮点数。
- py2x: 1/2返回0 py3x: 返回0.5,没有了int和long的区别。
- Python 3.x 去除了 long 类型,现在只有一种整型 int,但它的行为与 2.x 版本的 long 相同。还新增了 bytes 类型,对应于 2.x 版本的八位串,定义一个 bytes 字面量的方法如下:str 对象和 bytes 对象可以使用 .encode()和 .decode()方法相互转化。
- Python 中的除法有两个运算符:/和//。对于 //除法,这种除法被称为 floor除法,它会对除法的结果自动进行一个 floor操作,在 Python 2.x 和 Python 3.x 中是一致的。需要注意的是,//并不是舍弃小数部分,而是执行 floor操作。如果要截取整数部分,那么需要使用 math模块的 trunc函数。
13、比较运算符的区别
- 在 Python 2.x 中,不等于可以有两种写法,分别是 !=和 <>
- 在 Python 3.x 中去掉了 <>只有 !=一种写法。
14、八进制字面量表示 在 Python 3.x 中,表示八进制字面量的方式只有一种,那就是 0o1000,而 Python 2.x 中的 01000形式已经不能使用了。 15、去掉了 repr 表达式 “
在 Python 2.x 中反引号相当于 repr函数 (返回一个对象的 string 格式) 的作用。在 Python 3.x 中去掉了 “这种写法,只允许使用 repr函数,这样做的目的是为了使代码看上去更清晰。 15、打开文件
在 Python 2.x 中使用 file(…) 或者 open(…) ,而在 Python 3.x 中只能使用 open(…) 16、 map、filter 和 reduce
在 Python2.x 的交互模式下输入map和filter,可以看到它们两者的类型是 built-in function(内置函数)
它们输出的结果类型都是列表:
但是在 Python3.x 中发生了变化:
首先它们从函数变成了类,其次,它们的返回结果也从列表变成了一个可迭代的对象,可以尝试使用 next 函数来进行手工迭代:
对于比较高端的 reduce 函数,它在 Python3.x中已经不属于 built-in function,而是被挪到了 functools 模块当中。 |