📜  Python中的Inplace与标准运算符

📅  最后修改于: 2020-06-22 05:55:47             🧑  作者: Mango

普通运算符执行简单的分配工作。另一方面,Inplace运算符的行为与普通运算符相似,只是在可变目标和不可变目标的情况下它们以不同的方式起作用。

    • _add_方法,做简单的加法,  输入两个参数,返回其它变量之和,并将其存储,而无需修改任何参数。
    • 另一方面,_iadd_方法也带有两个参数,但是它将对存储在传递的第一个参数进行就地更改。由于在此过程中需要对对象进行更改因此不可更改的目标(例如数字,字符串和元组)不应具有_iadd_方法
    • 普通运算符的“ add()”方法实现“ a + b “,并将结果存储在上述变量中​​。
    • Inplace运算符的“ iadd()”方法实现“ a + = b “(如果存在)(即,在不可变目标的情况下,它不存在)并更改传递的参数的值。但是,如果不存在,则执行“ a + b”

在这两种情况下,都需要分配存储值。

# Python代码,展示不可变数值的就地替换add和常规add
# 导入operator模块
import operator
# 初始化
x = 5
y = 6
a = 5
b = 6
# 使用add()方法
z = operator.add(a,b)
# 使用iadd()方法
p = operator.iadd(x,y)
# 打印改变后的值
print ("改变后的值 : ",end="")
print (z)
# 打印改变后的值
print ("就地替换改变后的值  : ",end="")
print (p)
# 打印第一个参数的值
print ("使用常规add第一个参数的值 : ",end="")
print (a)
# 打印使用就地替换的第一个参数的值
print ("使用就地替换的第一个参数的值 : ",end="")
print (x)

输出:

改变后的值 : 11
就地替换改变后的值 : 11
使用常规add第一个参数的值 : 5
使用就地替换的第一个参数的值 : 5

情况2可变目标
可变目标(如列表和字典)中Inplace运算符的行为与普通运算符不同。在可变目标的情况下,更新和赋值都执行

# Python代码,展示可变数值的就地替换add和常规add
# 倒入operator模块
import operator
# 初始化列表
a = [1, 2, 4, 5]
# 使用add()
z = operator.add(a,[1, 2, 3])
# 打印常规add之后第一个值
print ("常规add的结果 : ",end="")
print (z)
# 常规add后的第一个值,没有改变
print ("常规add后的第一个值 : ",end="")
print (a)
# 使用iadd()
# performs a+=[1, 2, 3]
p = operator.iadd(a,[1, 2, 3])
# 打印使用就地替换add的结果
print ("使用就地替换add的结果 : ",end="")
print (p)
# 打印使用就地替换add后的第一个值
print ("使用就地替换add后的第一个值 : ",end="")
print (a)

输出:

常规add的结果  : [1, 2, 4, 5, 1, 2, 3]
常规add后的第一个值 : [1, 2, 4, 5]
使用就地替换add的结果 : [1, 2, 4, 5, 1, 2, 3]
使用就地替换add后的第一个值 : [1, 2, 4, 5, 1, 2, 3]