-
print
py2:print语句,意味着可以直接跟要打印的东西,如果后面接的是一个元祖对象,直接打印
py3:print函数,必须加上括号才能调用,如果接元组对象,可以接受多个位置参数并打印
如果在python2中把print当函数使用,可以导入future模块中的print_function
-
输入函数
py2:input_raw()
py3:input()
-
super()
py2:必须在显示的参数中写上基类
py3:直接无参数调用即可
-
1/2的结果(整数除法)
py2:返回0(整数)
py3:返回0.5(默认返回小数),没有了int和long的区别
-
编码
py2:默认ascii(开头要引入coding声明)
py3:默认utf-8
-
字符串
py2:unicode类型表示字符串序列,srt类型表示字节序列
py3:str类型表示字符串序列,byte类型表示字节序列
-
True和False
py2:True和False是两个全局变量,可以对其进行赋值或别的操作,初始数值分别为1和0,
py3:True和False不可变
-
迭代器
py2:当中许多返回列表的方法,如range,字段对象的dict.keys()、dict.values()方法,map、filter、zip;并且迭代器必须实现next方法
py3:将返回列表的方法改为了迭代器对象,内置的__next___方法,不用特意去实现next
-
nonlocal
py2:没有办法在嵌套函数中将变量声明为一个非全局变量,只能在函数中声明全局变量
py3:nonlocal方法实现了
# 不声明局部变量
def func():
c = 1
def foo():
c = 12
foo()
print(c)
func() #1
# 声明非局部变量(即全局变量)
def func():
c = 1
def foo():
nonlocal c
c = 12
foo()
print(c)
func() # 12
-
新、旧式类
py2:必须显性继承object才是新式类,否则是旧式类
新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索
py3:没有了旧式类,只有新式类
-
exec
py2:exec语句
py3:exec函数
-
min/max函数
py2:列表里面有None也可以使用min\max比较
py3:列表中所有元素必须是可比较的(即不是None)
-
虚拟变量
py2:如果使用列表推导式如a = [i for i in range(10)],我们得到结果,而i变量留在内存当中,如果在下面部分的代码再使用i变量,会导致不可见的错误
py3:不会出现上面这种情况,因为内存中不再保存变量i
-
模块改名或删除