“〜”(波浪号)运算符在Python中的应用

亚历克:

我只是通过这个问题发现了Python中按位补码一元运算并且一直在尝试为它提供一个实际的应用程序,如果没有,确定重载运算符(通过重写方法)以用于其他用途通常是否安全问题中给出的示例以失败,并且提供链接看起来非常吓人。以下是一些摆弄的使用说明:__invert__TypeError~

from bitstring import BitArray

x = 7

print(~x)
# -8

print(BitArray(int=x, length=4).bin)
# '0111'

print(BitArray(int=~x, length=4).bin)
# '1000'

print(~~True, ~~False)
# 1 0

for i in range(-100, 100):
    assert i + ~i == -1
    assert i ^ ~i == -1
    assert bool(i) == ~~bool(i)

是否有任何针对该运营商,我应该知道的有效使用情况的例子吗?并且即使存在,对于除以外的其他类型覆盖此运算符也通常可以接受int吗?

戳 :

按位NOT运算符的标准用例是按位运算,就像按位AND &,按位OR |,按位XOR ^以及按位移位<<and一样>>尽管它们很少在更高级别的应用程序中使用,但是仍然有些时候需要进行按位操作,因此这就是它们存在的原因。

当然,您可以为自定义类型覆盖这些内容,并且通常不需要这样做时遵循任何特定的语义。只需选择对您的类型有意义的内容,以及在某种程度上仍适合操作员的内容。

如果操作晦涩难懂,且只需一两个字就能更好地解释,则应改用标准方法。但是在某些情况下,尤其是在处理与数字相关的类型时,可能会有一些类似于数学的运算适合按位运算符,因此可以很好地使用它们。

就像您将覆盖标准运算符一样+-仅用于有意义的运算),您应该尝试对按位运算符执行相同的操作。


~~True, ~~False给您的原因(1, 0)是因为bool类型没有定义自己的__invert__操作。但是,int确实如此;并且bool实际上是的子类型int因此,bool实际上继承了所有按位和算术运算符的逻辑。这就是为什么True + True == 2等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Python

Python中的波浪号运算符

来自分类Javascript

什么是JavaScript中的“双波浪号”(~~)运算符?

来自分类Dev

正确使用波浪号运算符作为输入参数

来自分类Dev

C中的波浪符运算符查询工作方式不同

来自分类Dev

熊猫:使用波浪号运算符通过两个过滤器返回逆数据

来自分类Python

Python中的按位运算符

来自分类Python

IS运算符在python中的异常行为

来自分类Dev

Python中数字之间的AND / OR运算符

来自分类Dev

在Python中重写not运算符

来自分类Python

重载python中的任意运算符

来自分类Python

Python中的条件运算符?

来自分类Python

Python中的Overload()运算符

来自分类Python

python中的运算符重载

来自分类Dev

id()函数,在python中是运算符

来自分类Dev

Python中的“ in”运算符是“惰性”吗?

来自分类Dev

Airflow Python运算符中的宏

来自分类Dev

Python中的逻辑运算符

来自分类Dev

Python中的赋值运算符`=`

来自分类Dev

python中逗号运算符的含义

来自分类Dev

在python中重载[]运算符?

来自分类Dev

Python中的循环置换运算符

来自分类Dev

SCSS和号运算符

来自分类Dev

&运算符不能应用于C中的常量

来自分类Dev

Python中赋值运算符和复合运算符之间的区别

来自分类Dev

比较运算符和'is'-Python中的运算符优先级?

来自分类Java

-Java中的运算符

来自分类Dev

?? Swift中的运算符

来自分类Java

Java中的^运算符

来自分类Dev

Haskell中的运算符

TOP 榜单

热门标签

归档