Python: Сильная (или Строгая) типизация

Python относится к типам данных очень серьёзно. Если вы попытаетесь выполнить операцию между несовместимыми типами — программа выдаст ошибку. Всё дело в том, что Python — язык со строгой (или сильной) типизацией.

🧮 Что это значит на практике?

Допустим, вы складываете два числа:

print(1 + 7)  # => 8

Всё отлично. Операция сложения допустима для чисел. А что будет, если попробовать сложить число и строку?

print(1 + '7')  
# TypeError: unsupported operand type(s) for +: 'int' and 'str'

Python сообщает, что не может сложить int и str. Это ошибка типов: значения принадлежат к разным категориям, и программа отказывается продолжать.

🔎 Почему так строго?

Python защищает вас от неочевидных и опасных ошибок. Он требует, чтобы вы явно указали, как вы хотите преобразовать данные:

  • либо сделать строку числом (int('7'));
  • либо число строкой (str(1)).

Мы научимся делать это чуть позже.

🔁 А как в других языках?

Не все языки такие. Например, PHP и JavaScript используют слабую типизацию — они автоматически преобразуют типы, когда считают это «разумным»:

1 + '7';  // => '17'

В этом примере число 1 неявно превращается в строку '1', и результатом становится '17'.

Сначала может показаться, что слабая типизация — это удобно. Меньше кода, всё "просто работает". Но на практике это приводит к:

  • Неявным преобразованиям, о которых программист даже не подозревает.
  • Непредсказуемому поведению кода.
  • Трудным для отладки ошибкам, которые появляются в самых неожиданных местах.

Такие ошибки особенно сложно поймать, потому что программа может «иногда работать, иногда нет» — в зависимости от типа данных, которые в неё попали.

📌 Вывод

Python — язык со строгой типизацией. Он не позволяет выполнять операции между несовместимыми типами без явного преобразования. Это делает программы надёжнее и понятнее. Мы ещё научимся преобразовывать данные из одного типа в другой — и делать это всегда сознательно.

Задание

Выведите на экран результат выражения: 7 - (-8 - -2). Попробуйте сделать число 7 не числом, а строкой. Сработает ли такой код? Поэкспериментируйте с другими числами тоже.

Полезное

Как с вами связаться? 🙃

Команда проекта находится в телеграм-сообществе по ссылке https://ttttt.me/HexletLearningBot. Там можно задать любой вопрос и повлиять на проект

Упражнение не проходит проверку — что делать? 😶

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник". Как правильно задать вопрос:

В моей среде код работает, а здесь нет 🤨

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя 🤔

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно 🙄

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются

Привет! Я Тота и моя задача помочь в обучении. Чтобы активировать меня, нужно зарегистрироваться или залогиниться, если у вас уже есть аккаунт

Loading...

Ваше упражнение проверяется по этим тестам

1from hexlet.test import expect_output
2
3
4def test(capsys):
5    expected = "13"
6    expect_output(capsys, expected)
7

Решение учителя откроется через:

20:00
waiting_clock