В то время как другие авторы писали, почему is True
делает то, что он делает, я хотел ответить на эту часть вашего поста:
Я думал, что Python рассматривает что-либо со значением как True.Почему это происходит?
Исходя из Java, меня это тоже смутило.Python не обрабатывает ничего со значением как True
.Свидетель:
if 0:
print("Won't get here")
Это ничего не напечатает, потому что 0 рассматривается как False
.Фактически, ноль любого числового типа оценивается как False
.Они также заставили decimal
работать так, как вы ожидаете:
from decimal import *
from fractions import *
if 0 or 0.0 or 0j or Decimal(0) or Fraction(0, 1):
print("Won't get here")
Вот другое значение, которое оценивается как False
:
if None or False or '' or () or [] or {} or set() or range(0):
print("Won't get here")
Источники:
- https://medium.com/@dawran6/python-truth-value-testing-is-awesome-dae6c23cc1c2
- https://docs.python.org/3.7/library/stdtypes.html#truth-value-testing