说说你知道的Python3和Python2之间的区别?
说说你知道的Python3和Python2之间的区别?
编码:Python2的默认编码是asscii,这也是导致Python2中经常遇到编码问题的原因之*,至于是为什么会使用asscii作为默认编码,原因在于Python这门语言诞生的时候还没出现Unicode。Python3默认采用了UTF-8作为默认编码,因此你不再需要在文件顶部写# coding=utf-8了。
字符串:Python2中字符的类型,str:已经编码后的字节序列,unicode:编码前的文本字符;而Python3中字符的类型,str:编码过的unicode文本字符,bytes:编码前的字节序列。
可以认为字符串有两种状态,即文本状态和字节(二进制)状态。Python2和Python3中的两种字符类型都分别对应这两种状态,然后相互之间进行编解码转化。编码就是将字符串转换成字节码,涉及到字符串的内部表示;解码就是将字节码转换为字符串,将比特位显示成字符。
在Python2中,str和unicode都有encode和decode方法。但是不建议对str使用encode,对unicode使用decode, 这是Python2设计上的缺陷。Python3则进行了优化,str只有一个encode方法将字符串转化为一个字节码,而且bytes也只有一个decode方法将字节码转化为一个文本字符串。
print:Python2中的print是语句;Python3中的print是函数。例如:
# py2
>>> print("hello", "world")
('hello', 'world')
# py3
>>> print("hello", "world")
hello world复制代码
这个例子就比较明显了,在py2中,print语句后面接的是一个元组对象,而在py3中,print函数可以接收多个位置参数。如果希望在Python2中把print当函数使用,那么可以导入future模块中的print_function。
import:python2默认是按照相对路径导入模块和包,python3默认则是按照路径导入。
import的理解: python2和python3 通过import导入模块和包的区别
input:Python3:input解析输入为str字符型;Python2:input解析输入为int型,raw_input解析输入为str类型。
算法符:在Python2中,/执行传统除法,对于整数执行截断除法,浮点数执行浮点除法(保留小数部分,即使整除);//执行Floor除法,截除掉余数并且针对整数操作数返回一个整数,如果有任何一个操作数是浮点数,则返回一个浮点数。在Python3中,/总是执行真除法,不管操作数的类型,都会返回包含任何余数的浮点结果;//执行Floor除法,截除掉余数并且针对整数操作数返回一个整数,如果有任何一个操作数是浮点数,则返回一个浮点数。
int/long:Python3里,只有一种整数类型int,大多数情况下,它很像Python2里的长整型。Python2有为非浮点数准备的int和long类型。int类型的较大值不能超过sys.maxint,而且这个较大值是平台相关的。
True和False:在Python2中,True和False是两个全局变量(名字),在数值上分别对应1和0,既然是变量,那么它们就可以指向其它对象。Python3修正了这个缺陷,True和False变为两个关键字,永远指向两个固定的对象,不允许再被重新赋值。
迭代器:在Python2中很多返回列表对象的内置函数和方法在Python3都改成了返回类似于迭代器的对象,因为迭代器的惰性加载特性使得操作大数据更有效率。
例如:Python2中使用xrange()来创建一个迭代器对象,使用range()创建一个list数组(要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间);Python3中使用range()创建迭代器对象,移除了xrange()方法。
另外,字典对象的dict.keys()、dict.values()方法都不再返回列表,而是以一个类似迭代器的view对象返回。高阶函数map、filter、zip返回的也都不是列表对象了。Python2的迭代器*实现next方法,而Python3改成了__iter__()、next。
nonlocal:在Python2中可以在函数里面可以用关键字global声明某个变量为全局变量,但是在嵌套函数中,想要给一个变量声明为非局部变量是没法实现的,在Pyhon3,新增了关键字nonlcoal,一般使用在闭包中的,使变量使用外层的同名变量。
更多培训课程,学习资讯,课程优惠等学校信息,请进入 济南天桥区Web培训济南历城区Python培训济南长清区Linux云计算培训 网站详细了解,免费咨询电话:400-998-6158