Какие хорошие применения для Python3 "Аннотации функций" - PullRequest
150 голосов
/ 14 июня 2010

Функциональные аннотации: PEP-3107

Я наткнулся на фрагмент кода, демонстрирующий аннотации функций Python3. Концепция проста, но я не могу думать о том, почему они были реализованы в Python3, или о каком-либо хорошем их использовании. Возможно, ТАК может просветить меня?

Как это работает:

def foo(a: 'x', b: 5 + 6, c: list) -> max(2, 9):
    ... function body ...

Все, что следует после двоеточия после аргумента, является «аннотацией», а информация, следующая за ->, является аннотацией для возвращаемого значения функции.

foo.func_annotations вернет словарь:

{'a': 'x',
 'b': 11,
 'c': list,
 'return': 9}

Что значит иметь это в наличии?

Ответы [ 12 ]

0 голосов
/ 30 июля 2016

Если вы посмотрите на список преимуществ Cython, одним из основных является возможность сообщить компилятору, какой тип объекта Python.

Я могу представить себе будущее, в котором Cython (или аналогичные инструменты, которые компилируют)некоторые из вашего кода Python) будет использовать синтаксис аннотации, чтобы сделать их магию.

0 голосов
/ 02 мая 2015

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

def run(param1: int):
    """
    Does things.

    :param param1: Needed for counting.
    """
    pass

и мы можем запросить у пользователя вещь с именем "param1", которая "необходима для подсчета" и должна быть "int". В конце концов, мы даже можем преобразовать строку, заданную пользователем, в нужный тип, чтобы получить самый простой и удобный опыт.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...