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 类型一起使用,但我想它们在布尔值方面的工作方式与预期一致。
有时我有一个布尔字典,如下所示;
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 类型一起使用,但我想它们在布尔值方面的工作方式与预期一致。