在Python中的原地运算符和标准运算符

在Python中的原地运算符和标准运算符

介绍

Python提供了几种操作变量的运算符。这些运算符可以分为两种类型:原地运算符和标准运算符。

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

在本文中,我们将探讨它们相互之间的区别以及它们在数据上的表现。

1. 标准运算符

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

这些运算符包括:

  • 加法(+)
  • 减法(-)
  • 乘法(*)
  • 除法(/)
  • 还有更多

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

让我们来看下面的示例:

# Declaring two variables a and b
a = 5
b = 3

# Standard addition operator
c = a + b

# Printing result
print("The result, c =", c)
print("a remains unchanged, a =", a)
print("b remains unchanged, b =", b)

输出:

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

解释:

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

让我们考虑另一个示例来进行标准减法、乘法和除法:

# Declaring two variables
a = 5
b = 3

# Standard operations
sub = a - b
mul = a * b
div = a / b

# Printing results
print("a =", a)
print("b =", b)
print("Standard Subtraction, sub = a-b =", sub)
print("Standard Multiplication, mul = a*b =", mul)
print("Standard Division, div = a/b =", div)

输出:

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()
  • 还有很多其他操作符

让我们考虑以下示例:

# Declaring two variables a and b
a = 5
b = 3

print("The original value of a =", a)
print("The original value of b =", b)

# In-place addition operator
a += b
# The above operation is equal to - import operator
# a = operator.iadd(a, b)

print("a is modified, a =", a)

输出:

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

解释:

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

让我们再考虑一个原地减法、乘法和除法的示例:

# Declaring variables
a = 5
b = 3
c = 4
d = 7
x = 8
y = 2

# Original Values
print("a =", a)
print("c =", c)
print("x =", x)

# In-place operations
a -= b
c *= d
x /= y

# The above operations are equal to - import operator
# a = operator.isub(a, b)
# a = operator.imul(a, b)
# a = operator.itruediv(a, b)

# Printing results
print("In-place Subtraction a -= b, a =", a)
print("In-place Multiplication c *= d, c =", c)
print("In-place Division x /= y, x =", x)

输出:

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的结果)。

原地操作符的优点

原地操作符的主要优点如下:

  • 在处理大型数据集时更高效 - 它修改原始数据集而不是创建新的数据集,节省内存和处理时间。
  • 在处理可变对象时非常有用 - 当我们需要更新可变对象(如列表和数组)时,它非常有用。

让我们考虑以下示例:

# A list of integers
numbers = [1, 2, 3, 4, 5]

# Standard operator
squared_numbers = [num ** 2 for num in numbers]
print("squared_numbers =", squared_numbers)

# numbers remain unchanged
print("Standard Operation:")
print("numbers =", numbers, "# numbers list remains unchanged\n")

# In-place operator
for i in range(len(numbers)):
    numbers[i] **= 2
    # It is equivalent to - import operator
    # numbers[i] = operator.ipow(numbers[i], 2)

# numbers are modified
print("In-place Operation:")
print("numbers =", numbers, "# numbers list is modified")

输出:

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中,有两种类型的运算符:标准运算符和原地运算符。

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

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程