- print函数
python2中的print语句被python3中的print()函数取代,这意味着在python3中必须用()将需要输出的对象括起来。在python2中使用额外的括号也是可以的,但在python3中以不带括号的形式调用print函数,就会触发SyntaxError(语法错误)。
- 使用__future__模块
python3.x引入了一些与python2不兼容的关键字和特性。在Python2中,可以通过内置的__future__模块导入这些新内容。如果你希望在Python2环境下写的代码也可以在Python3中运行,那么建议使用__future__模块。
- 整数除法
在Python2中,除法的取值结果取整数
>>> 9/2 4而在Python3中,除法/的结果包含小数,如果只想取整数需要使用//
如果在python2中需要实现与python3相同功能的除法,需要导入模块>>> 9/2 4.5 >>> 9//2 4>>> from __future__ import division >>> 9/2 4.5
- Unicode
Python2有基于ASCII的str()类型,可通过单独的unicode()函数转成unicode类型,但没有byte类型。
在Python3中有了Unicode(UTF-8)的字符串和字节类(byte和bytearrays)。
- xrange
在Python2中,经常会用到xrange()创建一个可迭代对象,经常出现在“for循环”或“列表/集合/字典推导式”中。在Python3中,range()的实现方式与xrange()函数相同,所以不存在专用的xrange()(在Python3中使用xrange()会触发NameError)。
- 触发异常
Python2支持新旧两种异常触发语法,而Python3只支持带括号的语法(不然会触发SyntaxError)。
- next()函数和.next()方法
在Python2中,函数形式和方法形式都可以使用,在Python3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。
- for循环变量与全局命名空间泄露
在Python3中,for循环中的变量不再会泄露到全局命名空间中了。
- 比较无序类型
在Python3中,如果我们试图比较无需类型则会触发一个TypeError。
- 使用input()解析输入内容
Python3改进了input()函数,总会将用户输入存储为str对象。在Python2中,为了避免读取非字符串类型会发生的一些危险行为,不得不使用raw_input()代替input()。
- 返回可迭代对象,而不是列表
某些函数和方法在Python3中返回的是可迭代对象,而不像在Python2中返回列表。对象只遍历一次会节省很多内存,如果通过生成器多次迭代这些对象,效率就不高了。此时如果需要列表对象,可以通过Python3中的list()函数简单地将可迭代对象转成列表。
本文概述了从Python2迁移到Python3的关键差异,包括print函数的变化、除法运算符的不同行为、Unicode字符串处理、迭代器范围变化及异常处理等。对于希望使代码兼容两个版本的开发者来说,了解这些差异至关重要。
420

被折叠的 条评论
为什么被折叠?



