Чи є спосіб заперечити логічне значення, повернене до змінної?


79

У мене є сайт 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()

neg()Здається, власний метод python повертає заперечення цілого числа, а не заперечення логічного значення.

Дякую за допомогу.

Відповіді:


158

Ви можете зробити це:

item.active = not item.active

Це повинно зробити трюк :)




10

Іншим (менш стислим, читабельним, більш арифметичним) способом буде це:

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

1
+1 OMG, ніколи не знав, що це можливо, це має сенс, але я ніколи про це не думав !! Чудова відповідь! (Хоча bool(1-True)тоді трохи повільніше not True)
Давор Лучич

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()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.