オートコンプリートのサポートをPython code with Jedi に追加したい。これは、関数docstringまたはタイプヒント(あるいはその両方)を使用して実行できます。
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コード自体、次にJediの効率に興味があります。
TL; DR:型注釈を使用してください。すばらしいです。
Pythonとjedi
の両方で、docstringまたは関数アノテーションを使用しても違いはありません。パフォーマンスとメモリの両方への影響は目立たないはずです。明らかに実行時のオーバーヘッドはわずかです。両方の場合において。
Docstringは単純にPython文字列に変換され、属性_function.__doc__
_に格納されます。これには数バイトのメモリが必要ですが、気にする必要はありません。1000の非常に大きなdocstring文字はまだ1kBのRAMしか使用しません。メモリに制約がある場合は、_python -o
_を使用してdocstringを削除できます(また、アサートも検索してください)。
型注釈(PEP 484、例:def foo(a: int) -> str:
)は_function.__annotations__
_に格納されます:
_>>> def foo(bar: int): pass
...
>>> foo.__annotations__
{'bar': <class 'int'>}
_
これらの注釈も明らかにある程度のスペースを使用します(ただし、docstringよりも少なくなります)。ただし、実行時の実行には影響しません(___annotations__
_で明示的に操作する場合を除く)。
型注釈を使用することをお勧めします。それらは静的分析/ IDEのために導入されており、タイプの文書化に関しては間違いなく未来です。 mypy
、jedi
やその他のツールで、プログラムの検証で型アノテーションをより使いやすくするための多くの作業も行われています。すでに型注釈を使用しておけば、将来に備えることができます。
適切な答えではありませんが、オートコンプリート部分だけの場合、docstringもタイプヒントも必要ありません。また、非常に非常にveryとにかく、stdlibおよび3番目の部分のパッケージに「タイプヒント」コードがほとんどないことに注意してください。
最後に、FWIW:私はEmacsでJediをかなりの数年間使用していて、パフォーマンスの問題が発生したことは一度もないので、本当に心配する必要はないと思います...