Python: Аннотации типов

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

Давайте рассмотрим простой пример функции без аннотаций типов:

def concat(first, second):
    return first + second

Эта функция конкатенирует две строки в одну. При этом с первого взгляда на код сложно понять, что происходит в нем: какие типы у аргументов, почему функция работает со строками, а не складывает, например, два числа.

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

Теперь давайте добавим аннотации типов к функции:

def concat(first: str, second: str) -> str:
    return first + second

Здесь мы указали, что аргументы first и second должны быть строкового типа (str). Возвращаемое значение тоже будет строковым. Когда мы будем использовать эту функцию в коде, нам будет проще понять, какие типы аргументов можно передавать и какой тип возвращаемого значения ожидается.

Аннотации типов также могут быть использованы для определения типов переменных внутри функции. Например:

def double(n: int) -> int:
    result: int = n * 2
    return result

В этом примере мы определили тип переменной result как int, используя аннотацию типа.

Аннотации типов — это не строгая проверка типов в Python. Их использование не гарантирует, что функция будет вызвана с аргументами и возвращаемым значением указанных типов. Все таки Python остается динамически типизированным языком. В нем аннотации типов не влияют на возможность передачи аргументов различных типов или возвращения значений других типов. Тем не менее их использование упрощает чтение и понимание кода и помогает отслеживать ошибки.

Задание

Реализуйте функцию word_multiply(). Она должна принимать два параметра:

  • Строку
  • Число, которое обозначает, сколько раз нужно повторить строку
text = 'python'
print(word_multiply(text, 2)) # => pythonpython
print(word_multiply(text, 0)) # => 

Укажите аннотации типов при объявлении функции.

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

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

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

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

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

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

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

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

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

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

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

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

Loading...

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

1import index
2
3
4def test():
5    expected = [str, int, str]
6    annotations = index.word_multiply.__annotations__
7    print(annotations)
8    assert list(annotations.values()) == expected, "You should use type annotations!"  # noqa: E501
9
10    assert index.word_multiply("python", 1) == "python"
11    assert index.word_multiply("python", 3) == "pythonpythonpython"
12    assert index.word_multiply("java", 0) == ""
13

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

20:00
waiting_clock