Python “operator.\uu inv\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?

Python “operator.\uu inv\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?,python,bitwise-operators,operator-keyword,python-datamodel,Python,Bitwise Operators,Operator Keyword,Python Datamodel,inv和invert有什么区别 >>> import operator >>> operator.inv is operator.invert False >>> operator.__inv__ is operator.__invert__ False 我推测这是一元操作的挂钩,比如~1或(1)。\uuuu invert\uuuuu() 但是另一个对应的是什么呢?或者,如果它是相同的,为什么我们要添加另一个名称和不同的函数来执行相同的操作

inv
invert
有什么区别

>>> import operator
>>> operator.inv is operator.invert
False
>>> operator.__inv__ is operator.__invert__
False
我推测这是一元操作的挂钩,比如
~1
(1)。\uuuu invert\uuuuu()


但是另一个对应的是什么呢?或者,如果它是相同的,为什么我们要添加另一个名称和不同的函数来执行相同的操作?

两者都代表相同的运算符。Python 2.0中添加了长拼写,而短拼写从未被删除

operator.inv(obj)
operator.invert(obj)
operator.\uuuu inv\uuuj(obj)
operator.\uuuuuuuuuuuuuuuj(obj)
返回数字obj的按位倒数。 这相当于
~obj

版本2.0中新增:名称
invert()
\uuuuuuuuu 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
操作员__ >>>运算符。\uuu反转__ >>>操作员.\uuuu inv\uuuuu是操作员.inv 真的 >>>运算符.\uuuu invert\uuuuu是运算符.invert 真的
从历史上看,这两个名称都是同样可行的-使用的是
inv
/
\uuuu inv
名称,而使用的是特殊方法
\uuu invert\uuuuuu
名称。

根据
inv
invert
\uuuuu inv
\uuu invert\uuuuuuu>都是相同的运算符。并不意味着它们是同一个函数。根据文档。这并不意味着它们必须是同一个物体。好吧,但这并不能真正回答我的问题。为什么
\uuuuu inv\uuuuuu
与任何魔法方法都不对应,却在那里?如果它们是相同的,那么为什么它们有不同的实现,而不仅仅是名称别名?它回答“另一个
\uuuu inv\uuuu
对应的是什么”和“为什么我们有另一个名称”。最后一个给我一秒钟。@XÆa-13给你。我认为name参数不太有说服力,因为例如,
IOError.\uu name\uuuu
是“OSError”吗?这是技术上的事实,不是争论<代码>IOError
表示为
。选择不同的运算符来表示错误,而不是错误。需要单独实现或不需要直接执行此选择。