首页 > 解决方案 > 一个令人困惑的功能,不做它所说的事情

问题描述

在 operator 模块中,有一个方法被称为isub,它接受两个参数,并将第一个参数划分为第二个参数。

Visual Studio Code 说它这样做:与 a -= b 相同,如何?

在我的例子中,我创建了一个名为a5 作为其值的变量,然后使用该isub方法,并将结果保存到一个变量中,然后打印结果和a,但a仍然是 5,为什么?

import operator

a = 5
result = operator.isub(a, 4)
print(result) # 1
print(a) # 5

标签: python

解决方案


你选择了一个糟糕的例子。int.__isub__没有定义,所以a -= 5完全等于a = a - 5,没有就地修改原始值。

尝试使用一组,它确实实现了__isub__.

>>> s = {1,2,3}
>>> operator.isub(s, {2})
>>> s
{1, 3}

a -= ba.__isub__(b) 如同 a.__isub__定义一样被执行。否则,它等价于a = a - b,实现为a = a.__sub__(b)。因此,isub(a, b)与 相同a -= b,但这并不意味着isub(a, b)可以或确实a就地修改。


推荐阅读