inv
和有什么区别invert
?
>>> import operator
>>> operator.inv is operator.invert
False
>>> operator.__inv__ is operator.__invert__
False
我认为这__invert__
是一元操作的钩子,例如~1
or (1).__invert__()
。
但是另一个__inv__
对应的是什么?或者如果它是相同的,为什么我们有另一个名字和不同的功能来做同样的事情?
inv
和有什么区别invert
?
>>> import operator
>>> operator.inv is operator.invert
False
>>> operator.__inv__ is operator.__invert__
False
我认为这__invert__
是一元操作的钩子,例如~1
or (1).__invert__()
。
但是另一个__inv__
对应的是什么?或者如果它是相同的,为什么我们有另一个名字和不同的功能来做同样的事情?
两者都代表同一个运算符。Python 2.0 中添加了长拼写,而短拼写从未被删除。
operator.inv(obj)
operator.invert(obj)
operator.__inv__(obj)
operator.__invert__(obj)
返回数字obj的按位倒数。这相当于
~obj
。2.0 版中的新功能:名称
invert()
和__invert__()
.
这些被实现为不同的对象,因为它们的表示反映了名称。请注意,相应的 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 1operator
模块使用inv
/__inv__
名称,而Python 1 数据模型使用特殊方法__invert__
名称。