2011-12-01 13 views
38

Mam witrynę Django, z obiektem Item, który ma właściwość boolowską active. Chciałbym zrobić coś takiego, aby włączyć właściwość z false na true i vice-versa:Czy istnieje sposób na zanegowanie wartości logicznej zwróconej do zmiennej?

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

Ta składnia jest ważna w wielu językach C oparte, ale wydaje się nieważny w Pythonie. Czy jest jakiś inny sposób to zrobić bez użycia:

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

Natywna pyton neg() metoda wydaje się powrót negację liczby całkowitej, a nie negację logiczną.

Dzięki za pomoc.

Odpowiedz

85

Można to zrobić:

item.active = not item.active

To powinno wystarczyć :)

12

item.active = not item.active jest pythonic sposób

13

myślę chcesz

item.active = not item.active 
6

The negacja dla booleans to not.

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

Dzięki chłopaki, to była błyskawiczna odpowiedź!

5

Jego proste do zrobienia:

item.active = not item.active 

Tak, w końcu skończy się z:

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

inny (mniej zwięzły czytelnej, więcej arytmetyki) sposób to zrobić byłoby:

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

+1 OMG, nigdy nie wiedziałem, że to możliwe, ma sens, ale nigdy o tym nie myślałem !! Świetna odpowiedź! (Chociaż 'bool (1-True)' jest nieco wolniejszy niż 'nie jest prawdą') –

+0

Możliwe, tak. Przydatny? Raczej nie! Istnieje mnóstwo brzydkich rzeczy, które można zrobić w większości języków, ale dla większości czytelników jest to po prostu straszne. Może w bardzo szczególnym kontekście może to mieć sens ... – BuvinJ

Powiązane problemy