【问题标题】:Python: Concise way to toggle boolean "once" (i.e., in one direction)Python:切换布尔“一次”的简洁方法(即在一个方向上)
【发布时间】: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


【解决方案1】:

每次将其设置为 True 肯定很快:单个机器周期,可能很容易并行处理。如果您想要在逻辑上类似于您尝试做的事情:

inner_has_been_true |= True

这也是一个单周期指令,一个“位设置”操作。这是

的简写
inner_has_been_true = inner_has_been_true | True

【讨论】:

  • inner_has_been_true |= True 是inner_has_been_true = inner_has_been_true | True 的简写,不等同于inner_has_been_true = inner_has_been_true or True
  • 谢谢——这就是我一直在寻找的东西!
  • @Alex -- 谢谢。我更正了我的答案。我认为这周我输入了太多的用户文档。
猜你喜欢
  • 2010-09-18
  • 1970-01-01
  • 2015-04-28
  • 2020-03-02
  • 1970-01-01
  • 2016-05-12
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
相关资源
最近更新 更多