2011-12-01 63 views
38

我有一個Django站點,它有一個Item對象,它有一個布爾型屬性active。我願做這樣的事情,從假屬性切換爲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()方法似乎返回一個整數的否定,而不是一個布爾值的否定。

感謝您的幫助。

回答

85

你可以這樣做:

item.active = not item.active

這應該做的伎倆:)

12

item.active = not item.active是Python的方式

13

我想你想

item.active = not item.active 
6

的布爾的否定是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() 
8

另(較小 簡潔 可讀,更算術)的方式來做到這將是:

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

+1 OMG,從來不知道這是可能的,它確實有道理,但我從來沒有想過它!很好的答案! (儘管'bool(1-True)'比'not True'慢一點) –

+0

可能的,是的。有用?不見得!大多數語言都可以做很多這樣的醜陋事情,但這對大多數讀者來說是非常混亂的。也許在一個非常特殊的情況下這可能是有道理的... – BuvinJ

相關問題