Python 2到Python 3迁移指南

需积分: 9 0 下载量 31 浏览量 更新于2024-09-09 1 收藏 668KB PDF 举报
"这篇文档是针对想要转向使用Python 3的Python 2程序员编写的,旨在列出不同版本间改变的对象和习惯用法,并演示如何从Python 2风格过渡到Python 3.1风格。它还介绍了Python 3.1的一些新特性。如果你打算转换现有的程序或模块,首先应该使用2to3工具。对于全面的Python 3语言介绍,可以参考Mark Summerfield的《Programming in Python 3》第二版。" 在Python 2到Python 3的迁移过程中,主要的知识点包括: 1. 字符串和字符串格式化: - Python 3的字符串默认是Unicode编码,不再需要使用`unicode()`函数将其他类型转换为Unicode字符串。例如,Python 2中的`unicode(x)`在Python 3中应写为`str(x)`。 - Unicode字符串表示也有所改变,Python 2中的`u"\u20AC"`在Python 3中简化为`"\u20AC"`。 - 在Python 3中,原始字符串(raw string)的前缀从`ur`变为`r`,如`ur"\w"`在Python 3中写为`r"\w"`。 2. 字符串格式化操作 `%` 已被弃用,推荐使用 `str.format()` 方法。这是更现代且可读性更强的字符串格式化方法。例如: - Python 2中的`"%d%s" % (i, s)` 在Python 3中应转换为`"{i}{s}".format(i=i, s=s)`,或者使用字典形式`"{0[i]}{0[s]}".format({'i': i, 's': s})`。 - 使用关键字参数时,Python 3可以使用`**`运算符,如`"{i}{s}".format(**{'i': i, 's': s})`,这比Python 2的`"%(i)d%(s)s" % {'i': i, 's': s}`更加灵活。 3. 除了上述更改,还有其他一些重要的Python 3特性: - 函数返回值默认为None,而不是Python 2中的NoneType。 - print语句变为print()函数,如`print x`在Python 3中需要写为`print(x)`。 - 非本地化异常处理的语法改变,如`except Exception, e`在Python 3中应写为`except Exception as e`。 - range()函数在Python 3中返回的是一个迭代器,而不是列表。如需列表,可使用list(range())。 - 全新的字典和集合操作,如字典的`update()`方法现在返回None,而不是旧版本中的self引用。 - 异常类的继承结构改变,许多标准库的异常类都从Exception派生。 这些改动要求程序员在从Python 2迁移到Python 3时,不仅要更新代码,还需要理解新特性的背后逻辑,以充分利用Python 3的优势。为了确保平稳过渡,建议使用2to3工具自动转换代码,并进行详尽的测试以确保所有功能都能正常运行。同时,阅读官方文档和相关的书籍,如《Programming in Python 3》第二版,可以帮助深入理解Python 3的语法和最佳实践。