complex(False, True) — что выводит и почему

complex(False, True) — что выводит и почему

@python_quiz

Разберем этот квиз

Короткий разбор небольшого фрагмента Python-кода и причин полученного результата. Код:

python

Ожидаемый вывод программы:

Ниже разберём каждую часть результата, покажем демонстрации и объясним, почему другие варианты ответа не подходят.

Что делает complex(False, True)

  • False и True в Python являются подтипами int, соответствуют 0 и 1 соответственно.
  • complex(x, y) создаёт комплексное число x + y*j (j — мнимая единица в Python).
  • Поэтому complex(False, True) эквивалентно complex(0, 1), то есть 1j.

Простой демонстрационный пример:

python

Разбор трёх выражений в print

  1. bool(z)

- Логическое значение комплексного числа определяется его нулевостью: ненулевое число даёт True, нулевое (0+0j) — False.
- z = 1j — это ненулевой комплекс, поэтому bool(z) возвращает True.

  1. z == 1j

- Оператор == сравнивает по значению. Поскольку z содержит те же числовые части, что и литерал 1j, сравнение даст True.

  1. z is 1j

- Оператор is проверяет идентичность объектов (т.е. указывают ли обе переменные на один и тот же объект в памяти).
- complex(False, True) создаёт новый объект комплексного числа, а литерал 1j — другое (возможно созданное отдельно) значение. Даже если значения одинаковы, объекты обычно разные, поэтому is вернёт False.
- Важно: is нельзя использовать для проверки равенства значений; он предназначен для проверки тождественности объекта.

Демонстрация идентичности через id():

python

Вывод покажет одинаковые числовые значения, но, как правило, разные id и False для is.

Почему другие варианты вывода неверны

Варианты, где bool(z) равняется False, не учитывают, что z = 1j — ненулевое число, значит bool(z) не может быть False.

Варианты, где z == 1j даёт False, игнорируют семантику оператора сравнения по значению: равные по составляющим комплексные числа считаются равными.

Вариант, где z is 1j даёт True, предполагает, что интернирование (повторное использование одного и того же объекта) произошло для комплексных чисел — это не гарантировано и в общем случае не так. Для проверки равенства следует использовать ==, а не is.

Короткие рекомендации

  • Для проверки равенства чисел используйте ==.
  • Для булевой проверки числовых значений помните: ненулевое число → True, ноль → False (включая комплексные числа).
  • is применяйте только когда нужно проверить тождественность объекта (например, проверка на None: x is None).

Вывод: выражение complex(False, True) даёт 1j; логически это ненулевое число, равное 1j по значению, но не обязательно тот же самый объект в памяти.

Report Page