2011-12-01 8 views
38

Ho un sito Django, con un oggetto Item con proprietà booleane active. Mi piacerebbe fare qualcosa di simile per alternare la proprietà da false a true e viceversa:C'è un modo per annullare un valore booleano restituito alla variabile?

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

Questa sintassi è valida in molti linguaggi C-based, ma sembra non valida in Python. C'è un altro modo per fare questo senza usare:

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

Il metodo nativo pitone neg() sembra tornare la negazione di un numero intero, non la negazione di un valore booleano.

Grazie per l'aiuto.

risposta

85

Si può fare questo:

item.active = not item.active

Questo dovrebbe fare il trucco :)

12

item.active = not item.active è il modo divinatorio

13

Penso che si desidera

item.active = not item.active 
6

Il la negazione per i booleani è not.

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

Grazie ragazzi, è stata una risposta lampo veloce!

5

La sua semplice da fare:

item.active = not item.active 

Così, finalmente si finirà con:

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

Un altro (meno concisa leggibile, più l'aritmetica) modo per farlo potrebbe essere:

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

+1 OMG, non ho mai saputo che fosse possibile, ha senso ma non ci ho mai pensato !! Bella risposta! (Anche se 'bool (1-True)' è un po 'più lento allora' non vero ') –

+0

Possibile, sì. Utile? Non probabile! Ci sono un sacco di cose brutte che puoi fare con la maggior parte delle lingue, ma questo è terribilmente confuso per la maggior parte dei lettori. Forse in un contesto molto speciale questo potrebbe avere senso ... – BuvinJ

Problemi correlati