변수에 반환 된 부울을 부정하는 방법이 있습니까?


79

Item부울 속성이있는 개체 가있는 Django 사이트 가 있습니다 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()메서드는 부울의 부정이 아닌 정수의 부정을 반환하는 것 같습니다.

도와 주셔서 감사합니다.

답변:


158

다음과 같이 할 수 있습니다.

item.active = not item.active

그것은 트릭을해야합니다 :)


16

당신이 원하는 것 같아요

item.active = not item.active


10

이를 수행하는 또 다른 (덜 간결하고 읽기 쉽고 산술적) 방법은 다음과 같습니다.

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

1
+1 OMG, 이것이 가능하다는 것을 결코 몰랐습니다. 이치에 맞지만 생각하지 못했습니다! 좋은 대답입니다! (하지만 bool(1-True)조금 느립니다 not True)
Davor Lucic

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()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.