Что является более эффективным: строки документов 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 уже несколько лет, и у меня никогда не было проблем с производительностью, так что я не думаю, что вам стоит беспокоиться...

Другие вопросы по тегам