if x:
# Evaluates for any defined non-False value of x
if not x:
# Evaluates for any defined False value of x
if x is None:
# Evaluates for any instances of None
Нет является его собственный тип, который оказывается ложным. «if not x» оценивает, если x = None, только потому, что None является False.
Нет никаких тонких различий, которые я знаю, но существуют точные методы для проверки положительности/отрицательности в точных ситуациях. Смешение их может работать в некоторых ситуациях, но может привести к проблемам, если они не поняты.
if x is True:
# Use for checking for literal instances of True
if x is False:
# Use for checking for literal instances of False
if x is None:
# Use for checking for literal instances of None
if x:
# Use for checking for non-negative values
if not x:
# Use for checking for negative values
# 0, "", None, False, [],(), {} are negative, all others are True
И даже больше. * Все * пустые коллекции и 0-эквиваленты являются (обычно) ложными. – delnan
collections.deque, collections.defaultdict, collections.namedtuple, collections.OrderedDict ... тоже что-нибудь с магическими методами '__bool__' или' __nonzero__', возвращающими false. – Autoplectic
и развернуть на 0-эквиваленты: Десятичный (0), 0 + 0j, 0.0 и т. Д. Все оцениваются как false. – Autoplectic