Разбираем по шагам:
1️⃣В выражении True == 1 используется оператор равенства: булевый тип 𝚋𝚘𝚘𝚕 является подклассом 𝚒𝚗𝚝, и значение True ведёт себя как единица, поэтому результат сравнения — логическое True, и переменная 𝚊 получает значение True.
2️⃣Во второй строке 1 == True просто меняет местами операнды, но семантика == остаётся прежней: значения всё так же считаются равными, поэтому переменная 𝚋 тоже становится True.
3️⃣В третьей строке вызывается type(True) — результатом будет объект типа 𝚋𝚘𝚘𝚕, и type(1) — объект типа 𝚒𝚗𝚝; оператор is здесь проверяет, являются ли оба результата вызова type(...) одним и тем же объектом типа, и так как 𝚋𝚘𝚘𝚕 и 𝚒𝚗𝚝 — разные классы, выражение даёт False, поэтому 𝚌 получает False.
4️⃣При вызове print(a, b, c) функция печатает текущие значения 𝚊, 𝚋 и 𝚌 через пробел, что даёт строку True True False.
Эта задачка важна тем, что показывает: булевы значения в Python — это не магический отдельный тип, а вполне себе подкласс целых чисел, поэтому True, 1 и 1.0 могут неожиданно сливаться в один и тот же ключ словаря или проходить проверки типов там, где ожидается int.
Post #4515
718
- ❤ 1
- 👍 1