Python 2 与 Python 3 在设计和使用上都有哪些主要差异?
考察说明
考察对 Python 2 与 Python 3 核心差异的理解,以及是否了解迁移时的关键点。
回答思路
- 【回答框架 1】语法差异方面,Python 3 中 print 变为函数,必须使用括号;整数除法默认返回浮点数,而 Python 2 中整数除法向下取整;Python 3 修复了字符串编码,默认使用 Unicode,而 Python 2 默认是 ASCII 字节串。
- 【回答框架 2】标准库和内置函数方面,Python 3 中 range 返回迭代器,而 Python 2 的 range 返回列表,xrange 才返回迭代器;Python 3 将 raw_input 重命名为 input,并且 input 在 Python 2 中会执行 eval,但在 Python 3 中不会。
- 【回答框架 3】异常处理方面,Python 3 强制使用 as 关键字捕获异常,如 except ValueError as e;Python 2 也支持 as,但老式语法 except ValueError, e 在 Python 3 中已移除。
- 【回答框架 4】数据结构方面,Python 3 中 dict 的 keys()、values() 等返回视图对象而非列表;Python 2 则返回列表,但 has_key() 在 Python 3 中已被 in 运算符取代。
- 【关键点 1】Python 3 是当前主流,官方已停止对 Python 2 的支持。
- 【关键点 2】编码差异是迁移中的重要问题,Python 3 字符串默认为 Unicode。
- 【关键点 3】除法运算的差异(/ 在 Python 3 中返回浮点,整数除法需使用 //)可能导致行为变化。
- 【易错点 1】不要将 Python 2 的 print 语句直接用于 Python 3,会引发语法错误。
- 【易错点 2】注意 Python 2 中的 raw_input 和 input 在 Python 3 中的合并,否则可能导致输入处理错误。
- 【易错点 3】Python 2 代码中的类似 dict.has_key() 方法在 Python 3 中不存在,需改用 in 关键字。