【发布时间】:2016-06-09 02:10:20
【问题描述】:
我发现自己需要在第一次发生某些事情时(并且只有在那时)更新一个布尔变量。使用var = not var 是不可能的,因为它每次都会继续翻转。
(对不起,这个愚蠢的例子;我正在努力寻找一个更明智的例子……)
inner_has_been_two = False
for outer in range(5):
for inner in range(3):
if inner == 2:
if not inner_has_been_two:
inner_has_been_two = True
print(inner_has_been_two)
假设我想尽可能少地“接触”变量——否则我可以通过简单地省略最里面的if-statement 来一次又一次地覆盖它。
基本上,我正在寻找一种更简洁、pythonic 的方式来模拟(三元条件运算符的二进制版本,例如)猫王运算符 (?:) 或空合并运算符(例如 ??;因情况而异语言)。
关于如何保持简短(呃)和清晰的任何想法?
【问题讨论】:
-
哦,想起来了。我什至玩弄了写作的想法:
inner_has_been_two = True if not inner_has_been_two。这是一条而不是两条;但仍然不太优雅,恕我直言。 -
inner_has_been_true |= 真
-
@Prune:这到底是什么意思?
-
@zondo
|执行“按位或”。 -
@Prune:是的,我从你的回答中意识到这意味着什么。我应该知道这是
inner_has_been_true = inner_has_been_true | True的快捷方式。我只是不经常使用按位运算,所以我没想到它们可以以同样的方式处理。
标签: python operators toggle binary-operators