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

Fur*_*tor 70 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()
Run Code Online (Sandbox Code Playgroud)

此语法在许多基于C的语言中有效,但在Python中似乎无效.还有其他方法可以在不使用的情况下执行此操作:

if item.active:
    item.active = False
else:
    item.active = True
item.save()
Run Code Online (Sandbox Code Playgroud)

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

谢谢您的帮助.

小智 147

你可以这样做:

item.active = not item.active
Run Code Online (Sandbox Code Playgroud)

这应该够了吧 :)


srg*_*erg 16

我想你想要的

item.active = not item.active
Run Code Online (Sandbox Code Playgroud)


Ser*_*lis 14

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


mik*_*iku 10

另一种(不太简洁,可读性更强)的方法是:

item.active = bool(1 - item.active)
Run Code Online (Sandbox Code Playgroud)


Fur*_*tor 6

布尔人的否定是not.

def toggle_active(item_id):
    item = Item.objects.get(id=item_id)
    item.active = not item.active
    item.save()
Run Code Online (Sandbox Code Playgroud)

谢谢大家,这是一个闪电般快速的反应!


Yug*_*dle 5

它很简单:

item.active = not item.active
Run Code Online (Sandbox Code Playgroud)

所以,最后你会得到:

def toggleActive(item_id):
    item = Item.objects.get(id=item_id)
    item.active = not item.active
    item.save()
Run Code Online (Sandbox Code Playgroud)