有没有办法否定返回变量的布尔值?


78

我有一个Django网站,其Item对象具有boolean属性active。我想做这样的事情将属性从False切换为True,反之亦然:

def toggle_active(item_id):
    item = Item.objects.get(id=item_id)
    item.active = !item.active
    item.save()

该语法在许多基于C的语言中有效,但在Python中似乎无效。还有另一种方法可以不使用以下方法来执行此操作:

if item.active:
    item.active = False
else:
    item.active = True
item.save()

原生pythonneg()方法似乎返回整数的取反,而不是布尔值的取反。

谢谢您的帮助。

Answers:


157

你可以这样做:

item.active = not item.active

这应该够了吧 :)




10

另一种(不太简洁易读,更多算法)的方法是:

item.active = bool(1 - item.active)

1
+1 OMG,从不知道这是可能的,这确实有意义,但我从未想过!好答案!(尽管bool(1-True)那时要慢一些not True
Davor Lucic

1
可能的,是的。有用?不见得!大多数语言都可以处理很多这类丑陋的事情,但这对于大多数读者来说是非常令人困惑的。也许在非常特殊的情况下这可能有意义……
BuvinJ

7

布尔值的取反是not

def toggle_active(item_id):
    item = Item.objects.get(id=item_id)
    item.active = not item.active
    item.save()

谢谢大家,那是闪电般的快速反应!


5

它很容易做到:

item.active = not item.active

因此,最终您将得到:

def toggleActive(item_id):
    item = Item.objects.get(id=item_id)
    item.active = not item.active
    item.save()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.