2014-04-14 2 views
0

Пришел сегодня и отлаживался, обнаружив, что было отклонение в поведении, которое я предсказал в результате not aDict, обрабатывается по-разному с not aDict=={}. Может ли кто-нибудь из известных подчеркнуть различия между этими двумя формами, пожалуйста.Разница между не dict и not dict == {}

отклонение было вызвано на следующей строке кода

if not aDictA and not aDictB: 

Оба были равны {}, и все же, если условие не возвращает истину.

строка кода изменено на

if not aDictA=={} and not aDictB=={}: 

и код работал, как ожидалось.

ответ

6

Вы правы в том, что пустые словари False в булевом контексте. Поэтому и empty_dict == {} эквивалентны, однако ...

В первом случае вы проверяете, являются ли они False.

>>> not {} 
True 

Но во втором, вы на самом деле проверить, если они пусты (поэтому False), а затем задним ходом его с not.

>>> not not {} # This is basically what you are doing. 
False 

Вы получаете разные результаты, потому что вы на самом деле не проверяете одно и то же состояние.

Смежные вопросы