宏观上:2.x 源码不规范,混乱,冗余。
3.x 源码优美清晰,统一标准,去除了冗余。
默认编码方式:2.x ASCII码 3.x UTF-8
用2.x 处理中文时,需要声明编码方式(由于cmd终端默认编码为GBK,所以声明为utf-8时,在cmd终端上,中文显示为乱码。)
# -*- encoding:utf-8 -*-
数据类型:
- 整型,2.x分int和long两种,3.x只有int类型。
运算符:
- 不等于,2.x可以使用<>和!=;3.x只能使用!=
print()方法:
2.x可以不用括号,写成
for letter in 'Python': print '当前字母:', letter
3.x必须有括号
print('当前字母:', letter)
input方法:
2.x 中,input()会处理成和输入数据相应的类型,是最终目标地址里内容的数据类型
3.x 中,input()得到的数据统一都是字符串。
但2.x中,有raw_input()方法,和3.x中的input()作用相同。可见,2.x中,input()有着更复杂的内部实现,用来转化数据类型。
range()函数:
2.x中,xrange()等价于3.x的,range()返回一个数字的列表。
3.x中,range()返回可迭代对象,可用list()转化为列表。
dict内建方法:
ps. 3.6之前,字典是无序的;3.6(包括3.6)之后,有序。这个有序和无序的区别是解释器造成的。字典数据类型本身还是无序的。
dict.popitem()无序字典下,是随机删除;有序字典下,是删除最后一对。
dict.keys()
2.x中,返回列表类型的键序列
3.x,返回dict_keys类型的数据,可用list()转换为列表类型
迭代器生成器:
3.x 支持 __iter__()和__next__()
2.x 支持__iter__(),next()
经典类新式类:
2.x 中存在经典类和新式类,默认是经典类,可通过继承object声明为新式类
经典类在多继承关系中,深度优先算法
新式类的super只支持super(子类名,self)
3.x 中只有新式类,默认继承object
新式类在多继承中,用C3算法检索父类,可用mro()方法获取检索序列,super()方法获取序列的相邻的下一个类对象
C3算法:两个原则缺一不可,顺序(序列)和效率(路径尽量短)
continue......