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

时间:2011-12-01 00:23:42

标签: python django

我有一个Django站点,其中Item对象具有布尔属性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()

本机python neg()方法似乎返回整数的否定,而不是布尔值的否定。

感谢您的帮助。

6 个答案:

答案 0 :(得分:128)

你可以这样做:

item.active = not item.active

应该这样做:)

答案 1 :(得分:13)

我想你想要

item.active = not item.active

答案 2 :(得分:12)

item.active = not item.active是pythonic方式

答案 3 :(得分:10)

另一种(少于简明可读,更多算术)的方法是:

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

答案 4 :(得分:6)

布尔值的否定是not

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

谢谢大家,这是一个快速反应!

答案 5 :(得分:5)

简单易行:

item.active = not item.active

所以,最后你最终会得到:

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