Python:切换布尔值 "once" 的简洁方式(即,在一个方向上)
Python: Concise way to toggle boolean "once" (i.e., in one direction)
我发现自己需要在某些事情第一次发生时(并且只有在那时)更新布尔变量。使用 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)
假设我想 "touch" 变量尽可能少——否则我可以通过简单地省略最里面的 if
语句来一次又一次地覆盖它。
基本上我正在寻找一种更简洁的 pythonic 方式来模拟(三元条件运算符的二进制版本,例如)Elvis 运算符(?:
)或空合并运算符(例如 ??
;因语言而异)。
关于如何使其简短(呃)和清晰的任何想法?
每次都设置为 True 肯定很快:一个机器周期,可能很容易并行处理。如果您想要在逻辑上像您尝试做的那样:
inner_has_been_true |= True
这也是一个单周期指令,一个"bit set"操作。这是 shorthand for
inner_has_been_true = inner_has_been_true | True
我发现自己需要在某些事情第一次发生时(并且只有在那时)更新布尔变量。使用 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)
假设我想 "touch" 变量尽可能少——否则我可以通过简单地省略最里面的 if
语句来一次又一次地覆盖它。
基本上我正在寻找一种更简洁的 pythonic 方式来模拟(三元条件运算符的二进制版本,例如)Elvis 运算符(?:
)或空合并运算符(例如 ??
;因语言而异)。
关于如何使其简短(呃)和清晰的任何想法?
每次都设置为 True 肯定很快:一个机器周期,可能很容易并行处理。如果您想要在逻辑上像您尝试做的那样:
inner_has_been_true |= True
这也是一个单周期指令,一个"bit set"操作。这是 shorthand for
inner_has_been_true = inner_has_been_true | True