`operator.__inv__` 存在的目的是什么?
What is `operator.__inv__` existing for?
inv
和invert
有什么区别?
>>> import operator
>>> operator.inv is operator.invert
False
>>> operator.__inv__ is operator.__invert__
False
我了解到 __invert__
是 ~1
或 (1).__invert__()
等一元操作的钩子。
但是另外一个__inv__
对应的是什么?或者如果是一样的,为什么我们有另一个名字和不同的功能添加来做同样的事情?
两者代表同一个运算符。长拼写是在 Python 2.0 中添加的,而短拼写从未被删除。
operator.inv(obj)
operator.invert(obj)
operator.__inv__(obj)
operator.__invert__(obj)
Return the bitwise inverse of the number obj.
This is equivalent to ~obj
.
New in version 2.0: The names invert()
and __invert__()
.
来源:Python 2 operator
documentation.
这些被实现为不同的对象,因为它们的表示反映了名称。请注意,相应的 dunder 和常规名称确实共享相同的表示和对象。
>>> operator.__inv__
<built-in function inv>
>>> operator.__invert__
<built-in function invert>
>>> operator.__inv__ is operator.inv
True
>>> operator.__invert__ is operator.invert
True
从历史上看,这两个名称同样可行 - Python 1 operator
module used the inv
/__inv__
name, whereas the Python 1 data model 使用特殊方法 __invert__
名称。
inv
和invert
有什么区别?
>>> import operator
>>> operator.inv is operator.invert
False
>>> operator.__inv__ is operator.__invert__
False
我了解到 __invert__
是 ~1
或 (1).__invert__()
等一元操作的钩子。
但是另外一个__inv__
对应的是什么?或者如果是一样的,为什么我们有另一个名字和不同的功能添加来做同样的事情?
两者代表同一个运算符。长拼写是在 Python 2.0 中添加的,而短拼写从未被删除。
operator.inv(obj)
operator.invert(obj)
operator.__inv__(obj)
operator.__invert__(obj)
Return the bitwise inverse of the number obj. This is equivalent to
~obj
.New in version 2.0: The names
invert()
and__invert__()
.
来源:Python 2 operator
documentation.
这些被实现为不同的对象,因为它们的表示反映了名称。请注意,相应的 dunder 和常规名称确实共享相同的表示和对象。
>>> operator.__inv__
<built-in function inv>
>>> operator.__invert__
<built-in function invert>
>>> operator.__inv__ is operator.inv
True
>>> operator.__invert__ is operator.invert
True
从历史上看,这两个名称同样可行 - Python 1 operator
module used the inv
/__inv__
name, whereas the Python 1 data model 使用特殊方法 __invert__
名称。