2016-05-08 5 views
5

Что лучше? (И почему?)Каков правильный способ проверки False?

if somevalue == False: 

или

if somevalue is False: 

ли ваши изменения, если ответ somevalue является строкой?

+2

Звучит слишком домашнее задание. – firegurafiku

+5

Я бы написал 'if not somevalue:' хотя для небулевых типов он будет вести себя по-другому: 'if not '": 'будет запускать код, но' if "" == False: 'не будет. – rodrigo

+0

Обычно вы явно не сравниваете объекты с 'False' /' True' в Python. Просто выполните 'if somevalue:' или 'if not somevalue:' –

ответ

4

Это скорее зависит от того, что somevalue может быть: если somevalue может быть все, что вы могли бы проверить, что это логическое и not:

if isinstance(somevalue, bool) and not somevalue 

это не полагается на False быть синглтон. Если это всегда одноэлементно вы также можете сделать:

if somevalue is False 

Но PEP8 Питона заявляет вы не должны заботиться если это о классе и просто использовать:

if not somevalue 

это будет оценивать, является ли somevalue «ложным». См. Python documentation on Truth value testing.

PEP8 состояния:

Не сравнивайте булевы значения Истина или Ложь, используя ==.

и дает эти примеры:

Yes: if greeting: 
No: if greeting == True: 
Worse: if greeting is True: 

, который транслирует в вашем случае:

Yes: if not greeting: 
No: if greeting == False: 
Worse: if greeting is False: 

Имейте в виду, что каждая строка считается "truthy" за исключением пустой строки ''.

3

is проверяет, являются ли два объекта буквально тот же объект. == проверяет равенство.

Если вы хотите проверить, что-то ложно, например. ноль, противоположный True, do if something == False.

Как уже упоминалось в комментариях, вы можете сделать if not something, это может улучшить читаемость совсем немного, но это то же самое, что и if bool(something) == False.

Я предпочитаю равенство, потому что, на мой взгляд, True и False должны вести себя так же, как и 10 в том смысле, истинного или ложные. Например, ("a" == "a") == False оценивает по: False точно так же, как ("a" == "a") == 0.

+1

мм, 'if not something'? – vaultah

+0

@vaultah, да, но если вопрос сформулирован так: выберите либо '==' либо 'is', лучше использовать' == ' – ForceBru

+1

*, но это то же самое, что' if something == False' *, no. Это то же самое, что 'если bool (something) == False'. – vaultah

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