Есть ли способ отменить логическое значение, возвращаемое в переменную? - PullRequest
61 голосов
/ 01 декабря 2011

У меня есть сайт Django с объектом Item, который имеет логическое свойство active.Я хотел бы сделать что-то подобное, чтобы переключить свойство с False на True и наоборот:

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

Этот синтаксис действителен во многих языках на основе Си, но в Python кажется недействительным.Есть ли другой способ сделать это БЕЗ использования:

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

Нативный метод python neg(), кажется, возвращает отрицание целого числа, а не отрицание логического значения.

Спасибо запомощь.

Ответы [ 6 ]

129 голосов
/ 01 декабря 2011

Вы можете сделать это:

item.active = not item.active

Это должно сработать:)

13 голосов
/ 01 декабря 2011

Я думаю, что вы хотите

item.active = not item.active
12 голосов
/ 01 декабря 2011

item.active = not item.active это питонский путь

10 голосов
/ 01 декабря 2011

Другой (менее краткий читабельный, более арифметический) способ сделать это будет:

item.active = bool(1 - item.active)
6 голосов
/ 01 декабря 2011

Отрицание для логических значений: not.

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

Спасибо, ребята, это был молниеносный ответ!

5 голосов
/ 01 декабря 2011

Это просто сделать:

item.active = not item.active

Итак, в конце концов вы получите:

def toggleActive(item_id):
    item = Item.objects.get(id=item_id)
    item.active = not item.active
    item.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...