Что является более эффективным: строки документов Python или подсказки типов?
Я хочу добавить поддержку автозаполнения в мой код Python с помощью Jedi. Это можно сделать с помощью либо строк документации функции, либо подсказок типа (или обоих).
def function_with_types_in_docstring(param1, param2):
"""Example function with types documented in the docstring.
:type param1: int
:type param2: str
:rtype: bool
"""
def function_with_pep484_type_annotations(param1: int, param2: str) -> bool:
"""Example function with PEP 484 type annotations."""
Какой метод документирования типов добавляет меньше накладных расходов с точки зрения использования памяти и времени выполнения? Меня интересует эффективность самого кода Python, а затем джедая.
2 ответа
TL;DR: используйте аннотации типов, они потрясающие.
Для Python и jedi
это не имеет значения, когда вы используете строки документации или аннотации функций. Как производительность, так и влияние на память не должны быть заметны. Очевидно, что в обоих случаях накладные расходы незначительны.
Строки документов просто преобразуются в строки Python и сохраняются в атрибуте function.__doc__
, Это занимает несколько байтов памяти, но вам не следует об этом беспокоиться. Очень большая строка документов, состоящая из 1000 символов, все еще использует только 1 КБ ОЗУ. Если ваша память ограничена, вы можете просто использовать python -o
чтобы избавиться от строк документации (а также утверждает, искать его).
Тип аннотации (PEP 484, например, def foo(a: int) -> str:
) хранятся в function.__annotations__
:
>>> def foo(bar: int): pass
...
>>> foo.__annotations__
{'bar': <class 'int'>}
Эти аннотации, очевидно, также используют некоторое пространство (но даже меньше, чем строки документов). Однако они не влияют на выполнение во время выполнения (кроме случаев, когда вы явно играете с __annotations__
,
Я бы порекомендовал вам использовать аннотации типов. Они были введены из-за статического анализа /IDE и, безусловно, являются будущим, когда дело доходит до документирования ваших типов. Там также много работы на mypy
, jedi
и другие инструменты, чтобы сделать аннотации типов более пригодными для проверки программ. Используйте типовые аннотации уже, и вы будете готовы к будущему.
Не правильный ответ, но только для части автозаполнения, ни строки документации, ни подсказки типа не требуются. Также обратите внимание, что вы все равно найдете очень-очень мало "подсказок по типу" в пакетах stdlib и 3rd part.
И наконец, FWIW: я использую джедаев в Emacs уже несколько лет, и у меня никогда не было проблем с производительностью, так что я не думаю, что вам стоит беспокоиться...