首页 > 应用开发 > > Python2和Python3的区别
Python 2在2020年元旦将正式停止官方支持,同时也有越来越多的 python 库 不再支持 python 2。
所以小编建议新手刚开始学习Python使用Python3版本
所以我们就来看看 pyhton 2 跟 python 3 有哪些区别,慢慢做个迁移~
__future__ 模块
通过 __future__ 模块,我们可以轻松使用 python 3 的特性,比如:
from __future__ import division
其它可以使用的特性主要有:
print 函数
python 2 中 print 是表达式,python 3 中 print 是函数:
除法运算
编码问题
python 2 中默认的字符串类型是 ASCII,python 3 中默认的字符串类型是 Unicode:
python 2 也支持 Unicode:
xrange
python 2 中 range() 返回一个list, xrange() 返回一个 xrange 对象(迭代器);使用 xrange() 在计算大范围时可以更加节省内存;
python 3 中不存在 xrange() ,只有 range() 也就是 python 2 中的 xrange() 。
异常
在 Python 3 中处理异常也轻微的改变了,在 Python 3 中我们现在使用 as 作为关键词。
捕获异常的语法由 except exc, var 改为 except exc as var。
使用语法except (exc1, exc2) as var可以同时捕获多种类别的异常。 Python 2.6已经支持这两种语法。
1. 在2.x时代,所有类型的对象都是可以被直接抛出的,在3.x时代,只有继承自BaseException的对象才可以被抛出。
2. 2.x raise语句使用逗号将抛出对象类型和参数分开,3.x取消了这种奇葩的写法,直接调用构造函数抛出对象即可。
在2.x时代,异常在代码中除了表示程序错误,还经常做一些普通控制结构应该做的事情,在3.x中可以看出,设计者让异常变的更加专一,只有在错误发生的情况才能去用异常捕获语句来处理。
next
python 2 中同时存在 next() 和 .next() ,而 python 3 仅保留 next() :
for循环变量和全局命名空间
python 3 中 for 循环的变量不会泄漏到全局命名空间。
input()
python 2 中,输入有两个函数 input() 和 raw_input();
python 3 中仅保留 input() ,功能同 raw_input() ,输入对象类型始终保存为 str;
数据类型
1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long
2)新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下:
>>> b = b'china'
>>> type(b)
str 对象和 bytes 对象可以使用 .encode() (str -> bytes) 或 .decode() (bytes -> str)方法相互转化。
>>> s = b.decode()
>>> s
'china'
>>> b1 = s.encode()
>>> b1
b'china'
3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),用 in替代它吧 。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2236/viewspace-3150873/ ,如需转载,请注明出处,否则将追究法律责任。