Python就地补充运算符

时间:2014-01-04 03:16:28

标签: python bitwise-operators

Python具有通常的按位运算符,如~&|等,以及+=&=等就地运算符。简化表达式,如:

a = a & 34234
a = a + 577

要:

a &= 34234
a += 577

尽管补码运算符~是一元函数,并且没有遵循相同的结构,因为它没有与两个值一起使用(如a34234),用其他类型的算子简化这些?

a = ~a # not bad at all

# Still easy to code but seems redundant
self.container.longVariableName.longName = ~self.container.longVariableName.longName

2 个答案:

答案 0 :(得分:3)

这是令人难以置信的模糊,但是:

self.container.longVariableName.longName ^= -1

完成工作,只要您处理的值是整数。需要“整数”,以便~^运算符之间存在可利用的数学关系。

为什么会这样:

  1. 按位补码与xor'ing相同,带有1位的无限字符串。
  2. Python保持整数使用无限宽度2的补码表示的错觉,因此-1“是”1位的无限字符串。

答案 1 :(得分:2)

如果您只关心对象实例的属性这样做,您可以编写如下方法:

def c(obj, atr):
    setattr(obj,atr,~getattr(obj,atr))

然后像:

一样使用它
c(self.container.longVariableName, 'longName')

我认为@TimPeters的回答要好得多,但我认为如果对将来需要用非整数执行此操作的人有用,我很乐意只使用即时属性