gpt4 book ai didi

python - Python 就地运算符函数与标准运算符函数有何不同?

转载 作者:太空狗 更新时间:2023-10-29 17:24:57 24 4
gpt4 key购买 nike

来自docs :

Many operations have an “in-place”version. The following functionsprovide a more primitive access toin-place operators than the usualsyntax does; for example, thestatement x += y is equivalent to x =operator.iadd(x, y). Another way toput it is to say that z =operator.iadd(x, y) is equivalent tothe compound statement z = x; z += y.

问题:

  • 为什么 operator.iadd(x, y) 不等同于 z = x; z += y?

  • operator.iadd(x, y)operator.add(x, y) 有何不同?

Related question ,但我对 Python 类方法不感兴趣;只是内置 Python 类型的常规运算符。

最佳答案

首先,您需要了解__add____iadd__ 之间的区别。

对象的 __add__ 方法是常规加法:它接受两个参数,返回它们的和,并且不修改任何一个参数。

对象的 __iadd__ 方法也有两个参数,但就地进行更改,修改第一个参数的内容。因为这需要对象突变,不可变类型(如标准数字类型)不应该有 __iadd__ 方法。

a + b 使用 __add__a += b 如果存在则使用 __iadd__;如果没有,它通过 __add__ 模拟它,如 tmp = a + b; a = tmpoperator.addoperator.iadd 的区别是一样的。

另一个问题:operator.iadd(x, y) 不等同于 z = x; z += y,因为如果不存在 __iadd__,则将使用 __add__。您需要分配值以确保在两种情况下都存储结果:x = operator.iadd(x, y)

您自己可以很容易地看到这一点:

import operator
a = 1
operator.iadd(a, 2)
# a is still 1, because ints don't have __iadd__; iadd returned 3

b = ['a']
operator.iadd(b, ['b'])
# lists do have __iadd__, so b is now ['a', 'b']

关于python - Python 就地运算符函数与标准运算符函数有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4772987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com