Vraag Is er een manier om een ​​Booleaanse variabele te annuleren?


Ik heb een Django-site, met een Item object met een boolean-eigenschap active. Ik zou zoiets als dit willen doen om de eigenschap van False naar True in te schakelen en omgekeerd:

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

Deze syntaxis is geldig in veel op C gebaseerde talen, maar lijkt ongeldig in Python. Is er een andere manier om dit te doen ZONDER het gebruik van:

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

De inheemse python neg() methode lijkt de ontkenning van een geheel getal terug te geven, niet de ontkenning van een boolean.

Bedankt voor de hulp.


45
2017-12-01 00:23


oorsprong


antwoorden:


Je kan dit doen:

item.active = not item.active

Dat zou de truc moeten doen :)


103
2017-12-01 00:25



Ik denk dat je het wilt

item.active = not item.active

13
2017-12-01 00:25



item.active = not item.active is de pythonische manier


12
2017-12-01 00:25



Een andere (minder beknopt leesbaar, meer rekenkundig) manier om dit te doen zou zijn:

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

9
2017-12-01 00:31



De ontkenning voor booleans is not.

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

Bedankt jongens, dat was een razendsnelle reactie!


6
2017-12-01 00:26



Het is eenvoudig om te doen:

item.active = not item.active

Dus uiteindelijk zal je eindigen met:

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

5
2017-12-01 00:30