一、Python 2.x 与 Python 3.x 的区别及关系是什么?
1、使用 __future__ 模块
Python 3.x 引入了一些与 Python 2.x 不兼容的关键字和特性。在 Python 2.x 中,可以通过内置的 __future__ 模块导入这些新内容。如果希望在 Python 2.x 中编写的代码可以成功地在 Python 3.x 中执行,建议使用 __future__ 模块。
2、print() 函数
Python 2.x 的 print 语句被 Python 3.x 的 print() 函数取代。
3、整数除法
Python 2.x 将 / 解释为普通除法,而 Python 3.x 将其解释为真除法。
4、Unicode
Python 2.x 有基于 ASCII 的 str() 类型,可通过单独的 unicode() 函数转成 unicode 类型,没有 byte 类型;Python 3.x 中有 Unicode(UTF-8)字符串和两个字节类(bytes 和 bytearrays)。
5、xrange
Python 2.x 中会用 xrange() 创建一个可迭代对象,通常出现在“for 循环”或“列表/集合/字典推导式”中。Python 3.x 中,range() 函数的实现方式与 xrange() 函数相同,所以 xrange() 函数废除。
6、触发异常
Python 2.x 支持带括号和不带括号的两种异常触发的语法,而 Python 3.x 只支持带括号的语法,对不带括号的语法,执行时会触发 SyntaxError 错误。
7、处理异常
Python 3.x 中处理异常必须使用 as 关键字,而在 Python 2.x 中不需要。
8、next() 函数和 .next() 方法
在 Python 2.x 中,next() 和 .next() 都可以使用;而 Python 3.x 中,只能使用 next() 函数。
9、使用 input() 解析输入内容
Python 3.x 改进了 input() 函数,将用户的输入总是存储为 str 对象;Python 2.x 中,会发生因读取非法字符串类型的一些危险行为,不得不使用 raw_input() 代替 input()。
10、返回可迭代对象,而不是列表
某些函数和方法在 Python 3.x 中返回的是可迭代对象,Python 2.x 中返回列表。此时,如果需要列表对象,可通过 Python 3.x 的 list() 函数即可将可迭代对象转换为列表。
二、Python 代码编写规范
1、缩进
行尾的冒号以及下一行的缩进表示一个代码块的开始,而缩进结束则表示一个代码块结束了。同一个级别的代码块的缩进量必须相同。
2、注释
Python 中常用的注释方式主要有两种:
1)单行注释:以符号 # 开始,表示本行 # 之后的内容为注释。
2)多行注释:包含一对三引号('''...''')或("""...""")之间且不属于任何语句的内容将被解释器认为是注释。
3、每个 import 语句只导入一个模块。
4、可以在行尾使用续行符“\”来表示下面紧接的一行仍属于当前行,但一般建议使用括号来包含多行内容。
5、使用必要的空格与空行增强代码的可续性。
6、适当使用异常处理结构提高程序的容错性和健壮性。
7、软件应具有较强的可测试性,测试与开发齐头并进。