Python:就地 "not'ing" 布尔值

Python: In-place "not'ing" of booleans

有时我有一个布尔字典,如下所示;

d = {'a': True, 'b': False, 'c': False}

我将其用作开关的集合,这些开关都必须打开 (True) 才能进行某些操作。在迭代时,这些开关会被翻转,例如

for char in text:
    if char == '0':
        d['a'] = not d['a']  # State of 'a' is switched
    ...

'a' 必须在上面查找两次这一事实让我很困扰。如果我用 1-1 表示开关的值,我可以像 d['a'] *= -1 那样进行切换,它只引用 d['a'] 一次。

理想情况下 Python 会为我提供一个就地 "not assignment" 操作员。

我找到我的接线员了!可以使用按位异或赋值运算符,

d['a'] ^= True

我还没有弄清楚按位运算符应该如何与一般 Python 类型一起使用,但我想它们在布尔值方面的工作方式与预期一致。