Share This
Связаться со мной
Крути в низ
Categories
//🐍 Аннотации типов в Python: все, что нужно знать за 5 минут

🐍 Аннотации типов в Python: все, что нужно знать за 5 минут

annotacii tipov v python vse chto nuzhno znat za 5 minut a5ee759 - 🐍 Аннотации типов в Python: все, что нужно знать за 5 минут

Местный переводчик В этой статье рассказываем, что такое аннотации типов, какой у них синтаксис и лучшие практики их применения.

annotacii tipov v python vse chto nuzhno znat za 5 minut 21d38c6 - 🐍 Аннотации типов в Python: все, что нужно знать за 5 минут

Проверка типов – одна из важнейших особенностей любого современного языка программирования; именно благодаря ей появился TypeScript. Проверка типов не только облегчает расширение кодовой базы и работу с ней в целом, но и быстро, надежно и автоматически обнаруживает многие ошибки программирования.

Впервые представленные в Python 3.5, аннотации типов являются основным способом обозначения типов для переменных и функций в Python.

Аннотации типов не обеспечивают проверку типов на уровне интерпретатора. Они предназначены для использования разработчиками, средами разработки, линтерами, программами проверки типов и т. д.

С технической точки зрения, язык Python имеет динамическую типизацию, поэтому типы известны только во время выполнения, а не во время компиляции (как это происходит в языках со статической типизацией, таких как C#). Однако стоит упомянуть, что сообщество Python совместно разработало вариант интерпретатора Python, который обеспечивает статическую проверку типов.

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

Синтаксис аннотации типов

Python поддерживает аннотацию типов для основных типов переменных, поддерживаемых языком: str, int, float, bool и None. Кроме того, в комплект входит модуль typing, позволяющий использовать более специализированные типы.

Аннотация переменных

Чтобы указать тип переменной в Python, просто добавьте двоеточие с пробелом, за которым следует тип (str, int, List[] и т. д.), сразу после имени переменной.

         from typing import List  name: str = 'Tommy' age: int = 24 height_in_meters: float = 1.7 colleagues: List[str] = ['Alicia', 'John']     

Аннотация функций

Синтаксис аннотации переменных работает и для параметров функций. Однако, чтобы указать тип возврата (return), мы добавляем стрелку –>, за которой следует его тип.

         from typing import Dict, List   def convert_celcius_to_fahrenheit(celcius_temp: float) –> float:     return (celcius_temp * 9/5) + 32  def send_email(subject: str, body: str, recipients: List[str], cache: Dict[str, str]) –> bool:     # пропущено для краткости     return True  # или False      

Использование специальных типов

Итак, когда мы разогрелись и познакомились с синтаксисом аннотаций типов, давайте познакомимся с более сложными типами.

Any

Переменная типа Any является неограниченной. Поэтому такие переменные совместимы со всеми другими типами (int, str, List и т. д.), а все остальные типы совместимы с ними.

         from typing import Any  result: Any = "SUCCESS"  # также работает, потому что переменные типа Any совместимы с другими типами result = 10  state: str = "PENDING"  # работает, потому что все остальные типы совместимы с типом Any. state = result     

Literal

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

         from typing import Literal  GENDER = Literal["male", "female", "non–conforming"]  def create_user(first_name: str, last_name: str, gender: GENDER) –> dict[str, str, GENDER]:     return {"first_name": first_name, "last_name": last_name, "gender": gender}  create_user("John", "Bond", "male")     

В вышеприведенном примере пол будет одним из значений литерального объявления GENDER – «мужской», «женский» или «non–conforming».

Union

Иногда переменная может обладать свойствами, охватывающими два объявленных типа. Переменная также может быть двух типов.

         from typing import Union   def get_room_temperature() –> Union[int, float]:     return 20.8  # 20 тоже сработает     

TypedDict

Словари, будучи одной из самых простых форм структуры данных в Python, являются одним из наиболее используемых типов переменных в языке.

Использование TypedDict может значительно улучшить читаемость кода, особенно в большом проекте, где много объявлений в разных местах; отслеживание того, что куда идет, становится затруднительным по мере изменения размера проекта.

         from typing import TypedDict, Union   class Card(TypedDict):     rank: Union[str, int]     suit: str  # класс Card теперь имеет поведение обоих классов TypedDict и dict  # Card может быть использован для аннотации переменной ace_of_spade: Card = {'rank': 'A', 'suit': '♤'}  # или может быть инстанцирован ace_of_spade = Card(rank='A', suit='♤')     

NoReturn

Тип NoReturn аналогичен типу void в других языках программирования. Он используется для объявления того, что функция не имеет возврата.

         from typing import NoReturn   def say_greeting() –> NoReturn:     print("Hello World!")     

Final

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

         from typing import Final  MIN_NAME_LENGTH: Final = 2  # выдаст ошибку, зафиксированную системой проверки типов MIN_NAME_LENGTH += 1  class Validator(object):     MIN_NAME_LENGTH: Final[int] = 4  class UserValidator(Validator):     # эта строка будет отмечена интерпретатором     MIN_NAME_LENGTH = 3      

Использование статической проверки типов в Python

Интерпретатор Python по умолчанию не осуществляет проверку типов. Однако была создана версия интерпретатора Python – mypy, которая обеспечивает проверку типов на уровне интерпретатора.

Вы можете использовать mypy двумя способами:

  1. Загрузить командную строку mypy и использовать ее для запуска ваших скриптов Python.
  2. Установить расширение mypy, доступное в VSCode и PyCharm.

Лучшие практики аннотации типов

1. Использование типа Any

Тип Any следует использовать только тогда, когда точный тип возвращаемой переменной или параметра функции нам неизвестен; это может быть при использовании сторонней библиотеки, не имеющей аннотаций типов, или при использовании модуля без аннотаций типов.

2. Включите статическую проверку типов

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

3. Используйте кортежи для массивов фиксированной длины

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

4. Типы возврата функций

Функции должны выполнять одно и только одно действие, поэтому они должны иметь один определенный тип.

***

В этой статье мы научились:

  1. Синтаксису аннотации типов, а также аннотации переменных и функций.
  2. Как использовать сложные конструкции типизации (Any, Literal, Union, TypedDict, NoReturn, Final).
  3. Как можно обеспечить проверку типов на уровне интерпретатора Python.
  4. Лучшим практикам аннотации типов и как внедрить проверку типов Python в свой проект.

Материалы по теме

  • 🐍🧩 Словари в Python: 12 задач для начинающих с решениями
  • 🐍 Дорожная карта Python-разработчика
  • 🐍 28 лучших каналов YouTube про Python для начинающих

  • 1 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close