首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >__invert__方法

__invert__方法
EN

Stack Overflow用户
提问于 2019-02-20 11:10:51
回答 1查看 4.6K关注 0票数 4

__invert__方法的目的是什么?我在探索Python内部元素时发现:

代码语言:javascript
复制
>>> dir(__builtins__.int)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']

令我惊讶的是:

代码语言:javascript
复制
__builtins__.int().__invert__()

这似乎打破了所有的数学规则,因为__builtins__.int()返回零,我们都知道你不能把这个整数反转。也许我错过了什么..。因此,我深入研究了文档,发现__invert__等价于按位计算。

  1. 为什么和如何将一个物体的反转定义为它的位逆而不是语义上更有意义的东西,一个非零的理性主义的逆是它的倒数,零没有一个,复合采用不同的方法,反转的状态或没有定义等等。 有人能给出一个例子,在高级别(即编译器/解释器优化级别)中,按位而不是类/对象的实例是一个有用的构造。
  2. 对象的类型返回对象本身,那么为什么我们不能将0的反转定义为None或NaN对象呢?
EN

回答 1

Stack Overflow用户

发布于 2019-09-20 15:54:27

__invert__是“二进制而非”运算符~的实现--它与数学中“反向”一词的任何正式定义完全无关。

对于整数0,使用2s补码,0b000...000的二进制否定是0b111...111 -或十进制中的-1

代码语言:javascript
复制
>>> ~int()
-1
>>> int().__invert__()
-1
>>> ~0
-1
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54784932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档