Рубрики
Без рубрики

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

Python 3.10 только что объявил о своем выпуске 10 апреля этого года. Большинство обновлений были сделаны для дальнейшей … Помечено программированием, Python.

Python 3.10 только объявил их Выпуск 10 апреля этого года. Большинство обновлений были сделаны для улучшения опыта разработчика и ремонтопригодности кодовой базы.

Нам понравилось написать о написании кода Python для его читаемого синтаксиса и удобной дизайна языка. Это было четко означено для избавления от префикса типа, вы обычно пишете на других языках, таких как C ++ или Java. Имейте в виду, что C ++ и Java являются компилируемыми языками, которые обязательно налагают набор грамматических правил для отображения их на машинном коде, который вы можете выполнить. Но Python – это динамически напечатанный язык, в котором переводчик может выводить тип объектов, которые мы вызываем на нашу функцию концепцией Утка печатаетЕсли он ходит как утка, и это доводы, как утка, то это должна быть утка Отказ Это дает нам столько комнаты, чтобы сосредоточиться на алгоритме вместо того, чтобы беспокоиться о неясном синтаксисе программирования, выражая логику нашего кода. Это нормально для относительно небольших проектов, где мы могли бы просто комментировать тип параметров, которые мы ожидаем нашей функции (или метода). Но построение ремонторуемой программной системы с людьми требует лучшего решения, чем комментировать то, что ожидает их функции.

Прежде чем мы поговорим о печатных аннотациях в Python, давайте сначала ценим элегантность префикса типа на других языках, чтобы мы могли получить смысл, когда аннотировать наш код. В то время как тип префикса типа может ввести синтаксические накладные расходы, он встроен на язык по причине: (1) разборки и (2) Тип безопасности Отказ В некотором смысле, введите Prefix Guards, какой тип нашей функции ожидает взять и тип возвращается, и, как правило, мы можем думать о функции в виде черного ящика, которая принимает и возвращает что-то. При использовании наложенных наложенных ограничений на другие скомпилированные языки оно позволяет нам сохранить намеренность нашего кода, что мы можем гарантировать, что она обслуживает его цель. Итак, не только то, что мы можем четко написать (и прочитать) что входит и выходит из нашей функции, но мы также можем гарантировать, что наша функция принимает правильные типы, которые мы указали.

Но как мы можем адаптировать это в Python? Вот где приходят аннотации типа.

В следующих разделах мы рассмотрим некоторые особенности аннотаций типа, которые поддерживает Python 3.10. Прежде чем начать, вот как мы можем аннотировать простую функцию в Python:

# annotated 
def λ(x:int)->float:
     return x*0.1

# unannotated
def λ(x):
     return x*0.1

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

float λ(int x){
    return (float)x*0.1;
}

Основная выгода, которую мы получаем по типу аннотации в Python, это читаемость и статический анализ. PEP 484 На выпуске Python 3.5 уточнилось, что хотя Python может потенциально поддерживать проверку типа выполнения, Python останется динамическим языком.

Что такое статический анализ и как мы можем сделать это в Python?

Инструменты статического анализа – это способ легко обнаружить уязвимости без выполнения программы. Это дает представление о нашем коде, не обязательно выполняя их, что автоматизирует обслуживание качества кода. Инструменты статического анализа также автоматизируют нахождение проблем безопасности в раннем возрасте. Так что очень здорово, но как мы можем использовать его на нашей IDE?

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

Теперь давайте охватим некоторые особенности аннотаций типа, которые мы можем сделать с Python 3.10.

Оператор Union New Type

# in previous versions
def λ(x: Union[int, float])->Union[int, float]:
    return x*2

# in Python 3.10
def λ(x: int | float)-> int | float:
   return x*2

Новый оператор Union принимается как вторые аргументы для Isinstance () и iSsubclass () функционирует как в:

>>> isinstance(1, int | str)
True

Улучшена аннотация Teashealian

Псевдоним типа в Python теперь можно выразить явно. Сравнивать:

# in previous versions
StrCache = 'Cache[str]'  # a type alias
LOG_PREFIX = 'LOG[DEBUG]'  # a module constant

и

# in Python 3.10
StrCache: TypeAlias = 'Cache[str]'  # a type alias
LOG_PREFIX = 'LOG[DEBUG]'  # a module constant

Для получения дополнительной информации см: https://docs.cython.org/3.10/whatsnew/3.10.html Отказ

Вынос

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

Источник изображения: https://www.elegantthemes.com/blog/wp-content/uploads/2020/02/000-online-code-editors.png.png.

Оригинал: “https://dev.to/iamdeb25/python-type-annotations-141n”