Можливо, я тут трохи педантичний, але я б сказав, що найкраща відповідь
if my_var is not None and 'something' in my_var:
Різниця полягає в явній перевірці None
, а не в неявному перетворенні my_var
на True
або False
.
Хоча я впевнений, що у вашому випадку відмінність не є важливою, у більш загальному випадку цілком можливо, щоб змінної не було, None
але все одно обчислювалося False
, наприклад, цілим числом 0
чи порожнім списком.
Отже, всупереч твердженню більшості інших плакатів, що це безпечно, я б сказав, що це безпечно, якщо ви явно заявляєте. Якщо ви не впевнені, тоді розгляньте цей дуже надуманий клас:
class Contrived(object):
def __contains__(self, s):
return True
def __nonzero__(self):
return False
my_var = Contrived()
if 'something' in my_var:
print "Yes the condition is true"
if my_var and 'something' in my_var:
print "But this statement won't get reached."
if my_var is not None and 'something' in my_var:
print "Whereas this one will."
Так, я знаю, що це не реалістичний приклад, але варіації трапляються в реальному коді, особливо коли None
використовується для позначення аргументу функції за замовчуванням.