Что такое строгая и динамическая типизация в контексте Python

Ответ

Это две независимые характеристики языка программирования, которые часто путают. Python является языком с динамической, но при этом строгой типизацией.

  1. Динамическая типизация (Dynamic Typing) означает, что тип переменной определяется в момент присваивания значения (во время выполнения), а не при объявлении. Одну и ту же переменную можно связать с объектами разных типов.

    # Тип переменной меняется во время выполнения
    my_variable = 10         # my_variable - это int
    print(type(my_variable))
    
    my_variable = "hello"  # Теперь my_variable - это str
    print(type(my_variable))
  2. Строгая типизация (Strong Typing) означает, что язык не позволяет смешивать в операциях переменные несовместимых типов. Попытка выполнить такую операцию вызовет ошибку.

    # Попытка сложить число и строку вызовет TypeError
    # Это и есть проявление строгой типизации
    try:
        result = 10 + "5"
    except TypeError as e:
        print(f"Ошибка: {e}")
        # Вывод: Ошибка: unsupported operand type(s) for +: 'int' and 'str'

Ключевое отличие: В языках со слабой типизацией (например, JavaScript) интерпретатор попытался бы неявно преобразовать типы, и операция 10 + "5" могла бы вернуть строку "105" или число 15.

Для добавления статической проверки типов в Python используется механизм аннотаций типов (PEP 484) и специальные инструменты, такие как mypy.