python2和python3解释器的区别
1.input的区别
Python2中有raw_input和input.
他的raw_input就相当于Python3中的input,他们把用户输出的数据全部转化为str字符串类型.
他的input让用户输出的是用户输出数据的原始类型,用户输入int类型,他显示的也是int类型,以此类推
2.整型的区别
Python2中有int整型和long长整型的概念,当数值超过一定的位数就显示为long长整型.
Python3中取消了long长整型的概念,将他合并到int整型中.
3.range的区别
python2中
1.range其实就是一个列表
2.xrange其实就是python3中的range
python3中range是一个迭代器,你需要值的时候我才给你
4.字典中的键keys(),值values(),键值对items()
python2
keys(),值values(),键值对items()都是作为列表的形式存放值,虽然能存储所有的值,但是占内存空间大。
python3
keys(),值values(),键值对items()其实也都是个迭代器想要的时候可以生成列表给你具体的值,不要的时候只会占很少的空间
5.默认字符编码的区别
python2
将py文件按照文本文件读入解释器中默认使用ASCII码(因为在开发python2解释器的unicode还没有盛行)
python3
将py文件按照文本文件读入解释器中默认使用utf-8
6.file和open的区别
#首先在python3中操作文件只有一种选择,那就是open()
#而在python2中则有两种方式:file()与open() 两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,但是,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作,我们一般使用open()打开文件进行操作,而用file当做一个类型,比如type(f) is file
7.生成包时的区别__init__文件
python2如果要导入包,包下面必须要有__init__文件
python3如果要导入包,包下面没有__init__文件也不会报错
所以我们在删除文件的时候不能把__init__文件删除,哪怕是他里边没有内容
8.新式类与经典类的区别
新式类:任何直接或者间接的继承于object的类就称之为新式类.(python3中的类的顶部都是object,所以python3中全是新式类)
新式类的继承顺序,先深度遍历,当遇到共同的父类时就广度遍历,新式类的继承顺序还可以通过调用mro方法来查看
经典类:不是object的子类,只有python2中有
经典类的继承顺序,全部都是深度遍历
具体可以查看面向的对象之继承的最后一部分内容,有遍历的详细图解
8.子类访问父类内容super()的区别
super(),括号内的参数
在python2中需要写出super(当前类名,对象本身)
python3中帮我们做了优化,可以省略不写
1 # 子类访问父类的内容 2 class Person: 3 def __init__(self,name,age): 4 self.name = name 5 self.age = age 6 7 def eat(self): 8 print('%s会吃东西'%self.name) 9 10 class Student(Person): 11 def __init__(self,name,age,id): 12 # 第一种,父类名直接调用,这种方法什么地方都可以调用,与继承无关,并且需要写上对象本身 13 Person.__init__(self,name,age) 14 # 第二种,super(类名,对象本身),是python2内置的 15 super(Student,self).__init__(name,age) 16 # 第三种,python3做了优化可以内部不传参,推荐使用 17 super().__init__(name,age) 18 self.id = id 19 20 def eat(self): 21 super().eat() # 第三种方法在访问父类的方法 22 super(Student,self).eat() # 第二种方法在访问父类的方法 23 print('%s吃更好的东西'%self.name) 24 25 s1 = Student('sxc',18,188) 26 s1.eat()
即代码中的第二种方式和第三种方式的区别