Python 中的就地运算符 vs 标准运算符

2024 年 8 月 29 日 | 5 分钟阅读

引言

Python 提供了多种运算符来执行各种变量操作。这些运算符可以分为两类:原地运算符和标准运算符。

两种运算符执行相同的任务,但它们的行为和对底层数据的影响不同。

在本文中,我们将探讨它们之间有何不同以及它们如何影响数据。

1. 标准运算符

标准运算符也称为非原地运算符。它们是大多数程序员熟悉的算术和逻辑运算符。

这些运算符包括

  • 加法 (+)
  • 减法 (-)
  • 乘法 (*)
  • 除法 (/)
  • 等等

在标准运算符执行的操作中,会生成一个新值作为结果,而原始变量保持不变。

让我们看下面的例子

输出

The result, c = 8
a remains unchanged, a = 5
b remains unchanged, b = 3

说明

在上面的标准加法示例中,c 的值是 a 和 b 的总和,而 a 和 b 的原始值保持不变。

让我们看另一个执行标准减法、乘法和除法的例子

输出

a = 5
b = 3
Standard Subtraction, sub = a-b = 2
Standard Multiplication, mul = a*b = 15
Standard Division, div = a/b = 1.6666666666666667

说明

在这里,从 a 中减去 b 的结果是 2,a 和 b 相乘的结果是 15,a 除以 b 的结果约等于 1.67。a 和 b 的原始值保持不变。

2. 原地运算符

原地运算符在原地执行操作,修改原始变量本身。这些运算符通过将赋值运算符 (=) 与另一个运算符结合来表示。

原地运算符包括

  • 加法 (+=) - 它等于 operator.iadd()
  • 减法 (-=) - 它等于 operator.isub()
  • 乘法 (*=) - 它等于 operator.imul()
  • 除法 (/=) - 它等于 operator.itruediv()
  • 等等

让我们看下面的例子

输出

The original value of a = 5
The original value of b = 3
a is modified, a = 8

说明

在这个原地加法示例中,a 的值通过加上 b 的值来修改。+= 运算符原地执行加法,直接更新 a 的值。

让我们看另一个原地减法、乘法和除法的例子

输出

a = 5
c = 4
x = 8
In-place Subtraction a -= b, a = 2
In-place Multiplication c *= d, c = 28
In-place Division x /= y, x = 4.0

说明

在这个原地操作示例中,a、c 和 x 的值发生变化,而 b、d 和 y 的值保持不变。a 的值更新为 2(5 - 3 的结果),c 更新为 28(4 * 7 的结果),x 更新为 4.0(8 / 2 的结果)。

原地运算符的优点

原地运算符的主要优点如下

  • 处理大型数据集时效率高 - 它修改原始数据集而不是创建新数据集,从而节省内存和处理时间。
  • 处理可变对象时很有用 - 当我们需要更新列表和数组等可变对象时,它会很有用。

让我们看下面的例子

输出

squared_numbers = [1, 4, 9, 16, 25]
Standard Operation:
numbers = [1, 2, 3, 4, 5] # numbers list remains unchanged

In-place Operation:
numbers = [1, 4, 9, 16, 25] # numbers list is modified

说明

在此示例中,使用标准运算符 ** 创建了一个新列表 squared_numbers。squared_numbers 包含 numbers 列表中元素的平方值。同时,使用原地运算符 **= 直接修改原始 numbers 列表,将每个元素原地平方。

在处理可变对象时,我们可以轻松地修改元素并提高应用程序的性能和内存使用。

注意:所有运算符都有原地对应项。如果不存在原地运算符,则必须使用标准运算符。

结论

在 Python 中,有两种类型的运算符:原地运算符和标准运算符。

  • 标准运算符包括算术和逻辑运算符,如加法、减法、乘法、除法等。
  • 原地运算符将赋值运算符 (=) 与另一个运算符结合,例如 +=、-=、*=、/= 等。

原地运算符在处理大型数据集时效率更高,在处理列表和数组等可变对象时也很有用。根据任务的要求和对数据所需的行为选择合适的运算符很重要。