剖析Python3相对于2版本以后的主要变化

来源:互联网 发布:淘宝购物的金钱过程 编辑:程序博客网 时间:2024/06/16 12:15

     对于初期学习python的同学,可能会面临一些问题,如同样一行代码,明明看到别人可以运行成功,而自己却不可以,于是便有点费解啦.........其实我们有时候陷入思想的泥潭的时候,只是因为我们尚未清除上面的污垢,而上面的问题便引发了我们接下来的讨论。

  1.     print     从内置命令变为一个函数,python2.4之前在应用时::print  s,而现在我们需要以一个函数的方式去运用它::print(s),打印一个名为s的变量。
  2.           map()  ,  zip() , etc  等采用迭代器的定义,所以要转化为列表形式才能应用和输出,例如  list(map( ))。
  3.           用 -t ,--t控制缩进,如果你混用空格与制符表则会被视为错误。
  4.           新增了环境管理器with/as python3以后支持多个环境管理项,举个梨子,with S(), as a...        
  5.           字符串编码变动,在python2中字符串字面量对应于8位的字符或面向于字节编码的字节字面量,而这样做的限制是无法完全支持国际字符集和unicode编码,所以为了弥补这一点,对于unicode编码采用了单独的字符串类型,在使用unicode编码时,在使用时需要在第一个引号前面加上’ u‘。在python3中默为unicode编码不必加前缀,否则会报错。在python3中将字节字面量和普通字符串作为两种不同类型。
  6.         Python 3.0把reload内置函数移到了imp标准库模块中。它仍然像以前一样重载文件,但是,必须导入它才能使用。在Python 3.0中,运行import imp并使用imp.reload(M),或者,运行from imp import并使用reload(M)。
  7. 在python2中from 模块  import 套件 可以出现在任何位置,但到了python3只能出现在顶部。这一点要特别注意。
  8. threadthread,Queue模块         改名_thread,queue。

    cPickle,SocketServer模块 改名_pickle,socketserver

    ConfigSparser模块        改名configsparser

    Tkinter模块              改名tkinter

    其他模块整合到了如http模块,urllib, urllib2模块等




  9. 在python2中编码是基于字符串的异常,而在python3是基于类的异常。

  10. 新增类的property机制(类特性)

  11. 在python2中混合类型可比较排序,在python3中非数字混合类型比较排序会报错。

  12. 变传统除法为真除法。在python2.7之前,这个操作对于整数会省去小数部分,对于浮点数会保持小数部分
    在python 3.0版本中会变成真除法(无论任何类型都会保持小数部分)

  13. 在python2中type(I)区分类和类型      在python3中 不再区分(不再区分新式类与经典类,同时扩展了元类)。


  14. 在python3中未绑定方法 都是函数

  15. 其外增加Keyword-One参数,增加Ellipse对象,简化了super()方法语法。

  16. 在python2.x可以这样写class MyException:     但在python3.x版本中我们要这样写 class MyException(Exception):,否则会出现报错的情况。

原创粉丝点击