Python2和Python3之间的区别

来源:互联网 发布:linux服务器架设书 编辑:程序博客网 时间:2024/06/15 21:53

  • print不再是语句,而是函数,比如原来是 print 'abc' 现在是 print('abc')

            但是 python2.6+ 可以使用 from __future__ import print_function 来实现相同功能

  • 在Python 3中,没有旧式类,只有新式类,也就是说不用再像这样 class Foobar(object): pass 显式地子类化object。但是最好还是加上. 主要区别在于 old-style 是 classtype 类型而 new-style 是 type类型
  •  原来1/2(两个整数相除)结果是0,现在是0.5了。python 2.2+ 以上都可以使用 from __future__ import division 实现改特性, 同时注意 // 取代了之前的 / 运算


  • xrange重命名为range  同时更改的还有一系列内置函数及方法, 都返回迭代器对象, 而不是列表或者 元组, 比如 filter, map, dict.items 等


  •  except Exception, e变成except (Exception) as e  只有 python2.5 及以下版本不支持该语法. python2.6 是支持的. 不算新东西
  • exec变成函数  类似 print() 的变化, 之前是语句.
* 主要是类库的变化, 组织结构变了些. 但功能没变. urlparse - > urllib.parse 这样的变化
* 最核心的变化它没有说, 对 bytes 和 原生 UNICODE 字符串的支持, 删除了 unicode 对象, str 为原生 unicode 字符串, bytes 替代了之前的 str 这个是最核心的.



import在Python3中默认使用绝对路径导入了,这是因为相对路径的导入是具有歧义的
比如文件夹结构:
  • test/
    • main.py
    • lib/
      • __init__.py
      • some_func.py
      • other_func.py
如果运行的是main.py文件,python会将当前cwd作为PYTHONPATH变量
在main.py中,通过
import lib.some_func
或者
from lib import some_func
在some_func.py中,如果使用import other_func是会报错的,建议使用
from lib import other_func

强行使用相对导入需要from .other_func import *
所以说从Python2迁移到Python3,会看到一个大型项目原有的代码结构是否良好,如果之前你的代码到处都是相对导入。。。啧啧
更详细的参见:PEP 0328 -- Imports: Multi-Line and Absolute/Relative

详细的2to3迁移事项可以参考2to3库的文档:26.6. 2to3 - Automated Python 2 to 3 code translation 能自动迁移的部分就不用人工了呗~


原创粉丝点击