Аннотации функций не предназначены для конкретного использования, их можно использовать для чего угодно.
Могут быть написаны инструменты для извлечения информации из аннотаций и выполнения любых действий, включая проверку типов или создание документации. Но сам Python ничего не делает с информацией. Вы можете использовать его для совершенно другой цели, то есть для предоставления функции, которая будет вызываться для параметра, или для объявления строки возможных возвращаемых значений.
Аннотациями может быть любой объект:
def somefunc(param1: "string annotation",
param2: 151631,
param3: any_object): -> "some information here":
и вы можете получить объекты, используя:
print (somefunc.func_annotations)
{'param1': "string annotation",
'param2': 151631,
'param3': <object any_object>,
'return': "some information here"}
Примеры использования, предоставленные PEP:
- Предоставление информации о наборе
- Тип проверки
- Пусть IDE покажут, какие типы ожидает и возвращает функция
- Перегрузка функций / универсальные функции
- Мосты на иностранных языках
- Адаптация
- Предикатные логические функции
- Отображение запроса к базе данных
- Маршалинг параметра RPC
- Другая информация
- Документация для параметров и возвращаемых значений
Поскольку синтаксис аннотаций функций слишком новый, он действительно не используется ни для каких рабочих инструментов.
Я предлагаю использовать другие методы для документирования этого. Я использую epydoc для генерации моей документации, и он может читать информацию о типизации параметров из строк документации:
def x_intercept(m, b):
"""
Return the x intercept of the line M{y=m*x+b}. The X{x intercept}
of a line is the point at which it crosses the x axis (M{y=0}).
This function can be used in conjuction with L{z_transform} to
find an arbitrary function's zeros.
@type m: number
@param m: The slope of the line.
@type b: number
@param b: The y intercept of the line. The X{y intercept} of a
line is the point at which it crosses the y axis (M{x=0}).
@rtype: number
@return: the x intercept of the line M{y=m*x+b}.
"""
return -b/m
Этот пример взят с сайта epydoc . Он может генерировать документацию в различных форматах и создавать хорошие графики из ваших классов и профилей вызовов.