python2 与 python3 的区别

2018-09-29 16:42:08   最后更新: 2018-09-29 16:45:56   访问数量:60




python3.0 版本又被称为 Py3k,是一个较大的升级

在性能提升的同事,为了不带有过多的累赘,python3 在设计时没有考虑向下兼容,致使许多基于早期 python 版本设计的程序无法在 python3 环境下运行

作为过渡版本,python 2.6、2.7 基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数

因此,新的 Python 程序建议使用 Python3 版本语法,即使无法立即使用Python 3.0,也建议编写相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7来执行

本文来介绍一下 python3 与 python2 的主要区别

 

整数除法

python2 中除法的做法与 C、C++、java 都保持一致,除法返回的结果的类型依赖于两个操作数的类型,这也就意味着,两个整数相除,返回的值也是整数,因此:

>>> 1/2 0

 

随着越来越多 0 基础的开发人员学习 python,他们对这一结果感到非常困惑,因为 python 本是弱类型语言,直观上这样的返回就是出现了错误的运算

 

python3 中,除法进行了修改:

>>> 1/2 0.5

 

 

python2 中还有一种除法://,他负责进行 floor 运算,即取不大于运算结果的最大整数,在 python3 中他们仍然保持一致

>>> 1//2.0 0.0

 

 

需要注意的是 floor 操作并不是舍弃小数部分:

>>> -1//2 -1

 

 

如果要截取整数部分,那么需要使用 math 模块的 trunc 函数

import math >>> math.trunc(-1/2) 0

 

 

下面是 python2 中异常处理的示例:

raise IOError, "file error" #抛出异常 except NameError, err: #捕捉异常

 

 

在 python3 中,他们需要变成这样:

raise IOError("file error") #抛出异常 except NameError as err: #捕捉异常

 

 

  • 在 python2 的时代,所有类型的对象都是可以被直接抛出的,而在 python3 时代,只有继承自 BaseException 的对象才可以被抛出

 

python2 有两种字符序列类型:str 和 Unicode,str 类型保存原始的 8 位 ascii 值,而 Unicode 实例包含 Unicode 字符

Python3 通过 bytes 类型报错 ascii 值序列,通过 str 类型保存 Unicode 字符

unicode 只是一个字符集,他没有赋予所存储的序列以具体的字符编码,因此编写Python程序的时候,一定要把编码和解码操作放在界面最外围来做,而且不要对字符编码做任何假设

 

python2 中,import 采用相对路径,这可能会导致一些问题,例如同一目录下有file.py,那么究竟是引用标准库 file 还是 file.py 将会成为歧义

Python3 如果还需要导入同一目录的文件必须使用绝对路径,否则只能使用相关导入的方式来进行导入

 

python2 中存在新式类与老式类的区别,这个区别我们后续会详细介绍

python3 彻底废除了经典类,统一采用新式类,及时你不显式声明,类依然继承自 object

 

Python3 使用更加严格的缩进

Python2 的缩进机制中,1 个 tab 和 8 个 space 是等价的,所以在缩进中可以同时允许tab和space在代码中共存

这种等价机制会导致部分 IDE 使用存在问题

Python3 中 1 个 tab 只能找另外一个 tab 替代,因此 tab 和 space 共存会导致报错:

  • TabError: inconsistent use of tabs and spaces in indentation.

 

python2 中任意两个对象都可以比较,但在 python3 中则限制只有相同类型才可以比较

 

 

 

  1. print 语句 -- python3 废弃了 print 语句,统一使用 print 函数,这在此前我们有介绍:
  2. exec 语句 -- python3 废弃了 exec 语句,统一使用 exec 函数
  3. execfile 语句 -- python3 废弃了 execfile 语句,使用 exec(open("./filename").read())
  4. <> -- 不相等操作符"<>"被Python3废弃,统一使用"!="
  5. long -- long整数类型被Python3废弃,统一使用int
  6. xrange 函数 -- xrange函数被Python3废弃,统一使用range
  7. iterator.next() -- 迭代器iterator的next()函数被Python3废弃,统一使用next(iterator)
  8. raw_input 函数 -- raw_input函数被Python3废弃,统一使用input函数
  9. dict.has_key 函数 -- 字典变量的has_key函数被Python废弃,统一使用in关键词
  10. file 函数 -- file函数被Python3废弃,统一使用open来处理文件,可以通过io.IOBase检查文件类型
  11. apply 函数
  12. StandardError -- 异常 StandardError 被Python3废弃,统一使用 Exception

 

https://docs.python.org/3.1/whatsnew/

https://www.cnblogs.com/kendrick/p/7478304.html

http://www.runoob.com/python/python-2x-3x.html

http://www.jyguagua.com/?p=2973

http://www.cnblogs.com/animalize/p/5633215.html

 






技术帖      python      技术分享      python3      python2      floor      unicode      import     


京ICP备15018585号