从Python 2切换到3的5个简单技巧

2025年1月5日 | 阅读 5 分钟

引言

在本教程中,我们将学习关于从 Python 2 迁移到 3 的 5 个简单技巧。许多重要的 Python 项目已经承诺完全过渡到 Python 3。在数据科学中,我们可以使用 NumPy、Pandas、SciPy 等。在机器学习中使用 TensorFlow、Scikit-Learn、XGBoost 等。对于 Web 应用程序,我们使用了 requests、Tornado。随着主要库全面过渡到 Python 3,更新您的代码库变得至关重要。在本教程中,我们将探讨五个简单的技巧来帮助您从 Python 2 版本过渡到 Python 3 版本。

1. 导入

Python 2 使用相对导入,而 Python 3 现在使用绝对导入,使其更加透明。考虑以下文件夹结构

在 Python 2 中,相对导入基于当前文件的位置编写。例如,要在我们的主题中导入一些辅助代码,我们会这样做:

Python 3 不再支持此导入样式,因为它不清楚您想要 `helper_code` 的“相对”还是“绝对”版本。如果名为 `helper_code` 的 Python 包已安装在您的计算机上,您可能会意外导入错误的包。现在,Python 3 要求显式导入,您需要清楚地指定模块相对于当前工作目录的位置。因此,导入您的辅助代码将如下所示:

注意包名称旁边的点(.),表示该包在当前目录中。同样,在包名称前使用两个点(..)(如 ..helper_code)会告诉 Python 该包位于 main_code.py 当前位置的上一级目录。关键点是 Python 3 要求您提供包的确切位置。

2. Print 语句

我们中的许多人在某个时候都遇到过与 Python print 语句相关的错误。这是一个肯定需要使用 Python 2 print 语句的任何人切换到 Python 3 格式的更改。我们将在下面提供一个示例:

本质上,您需要在代码中的所有 print 语句中添加括号。幸运的是,一旦包含括号,print 语句将同时兼容 Python 2 和 Python 3。

3. 整数除法

在 Python 2 中,使用 / 运算符来分割整数会导致商向下舍入到最近的整数。您必须在执行除法之前将整数转换为浮点数才能获得浮点数结果。Python 3 通过引入两个不同的运算符来简化此操作:/ 用于浮点除法,// 用于整数除法。Python 3 通过引入两个不同的运算符来简化此操作:/ 用于浮点除法,// 用于整数除法。

Python 3 中使用显式运算符可以提高代码的清晰度和可读性。// 运算符明确用于整数除法,而 / 运算符用于浮点除法,无需显式类型转换。注意这一点很重要,因为如果您在从 Python 2 迁移到 3 时不将整数除法从 / 更新为 //。您可能会得到浮点数结果而不是整数。

4. 字符串格式化

Python 3 中的字符串格式化语法得到了极大的改进。在 Python 2 中,您会像这样使用 % 符号

关于这些 Python 2 语句有几个关键点

  1. 变量的类型被明确指定,例如 %d 用于整数,%s 用于字符串,%f 用于浮点数。
  2. 字符串和变量分开编写并排放在一起。
  3. 该样式类似于 Python 2 的 print 语句,使用 % 符号插入变量而不使用括号。

Python 3 引入了一个字符串格式化方法,位于字符串类中,使用 str.format()。此格式化器允许您使用位置格式化组合字符串中的元素。

新的 format() 函数简化了此过程。此函数允许您在单个清晰的语句中格式化字符串,而无需指定类型。只需确保变量的顺序正确,一切都会无缝运行。

5. 返回可迭代对象而不是列表

在 Python 3 中,许多内置函数返回迭代器而不是列表。此更改主要旨在提高内存效率,因为迭代器通常比列表占用更少的内存。使用迭代器时,元素仅在需要时生成并存储在内存中。这允许创建大型数据集,例如数十亿个点,而不会消耗过多的内存。相比之下,创建包含 10 亿个浮点数的列表需要足够的 RAM 来同时存储所有数据。一般来说,使用迭代器的行为类似于列表。一个例子是遍历 range() 函数的输出。我们举一个例子:

请注意,即使在 Python 3 中 range() 返回一个迭代器,语法仍然相同。如果您特别需要一个列表,您可以使用 list() 函数轻松地将迭代器转换为列表。

Python 3 中一些常用的返回迭代器而不是列表的函数和方法包括 zip()、map()、filter(),以及一些字典方法,如 .keys()、.values() 和 .items()。

结论

在本教程中,我们将探讨五个简单的技巧来帮助您从 Python 2 版本过渡到 Python 3 版本。通过遵循上面列出的五个简单技巧,即更新导入语句、修改 print 语句、调整整数除法运算、使用新的字符串格式化方法以及理解迭代器而不是列表的使用,这个转变对于确保与数据科学、机器学习和 Web 开发中使用的现代工具和库的兼容性至关重要。这些更改将有助于提高代码的可读性、效率以及与 Python 最新进展的兼容性。