【问题标题】:Flip a boolean value without referencing it twice翻转布尔值而不引用它两次
【发布时间】:2020-09-02 11:00:36
【问题描述】:

我正在寻找一种类似于x *= -1 的简短语法,其中x 是一个数字,但对于布尔值,如果它甚至存在的话。它的行为应该像b = not(b)。对此感兴趣的是,当变量名很长时,能够在一行中翻转布尔值。

例如,如果你有一个可以打开|关闭房子里的灯的程序,你想避免写完整的东西:

self.lamps_dict["kitchen"][1] = not self.lamps_dict["kitchen"][1]

【问题讨论】:

  • 你的意思是True == not False?
  • b = not b...?
  • @norok2 长度。要么你可以把它变成一个单行并且必须写两次b的全名,或者你可以预先保存一个临时值然后写value = b; b = not value这更糟。
  • 你可以使用不同的临时变量,比如lamp = self.lamps_dict["kitchen"]; lamp[1] = not lamp[1]。但我更喜欢 Asocia 的回答 :-)

标签: python python-3.x


【解决方案1】:

你可以使用xor operator (^):

x = True
x ^= True
print(x) # False
x ^= True
print(x) # True

编辑:正如 cmets 中 Guimoute 所建议的那样,您甚至可以使用 x ^= 1 来缩短它,但它会将 x 的类型更改为可能不是您要查找的整数,尽管它如果您直接将其用作条件,if x:while x: 等,将毫无问题地工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2013-01-03
    • 2010-10-11
    相关资源
    最近更新 更多