python - 哪个效率更高 : Python docstrings or type-hints?

标签 python python-3.x type-hinting docstring python-jedi

我想使用 Jedi 为我的 Python 代码添加一些自动完成支持。 .这可以通过使用函数文档字符串或类型提示(或两者)来完成。

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,无论您使用文档字符串还是函数注释都没有区别。性能和内存影响应该不明显。在这两种情况下,运行时开销显然很小。

文档字符串被简单地转换为 Python 字符串并存储在属性 function.__doc__ 中。这需要几个字节的内存,但你不应该关心它。一个非常大的 1000 个字符的文档字符串仍然只使用 1kB 的 RAM。如果你的内存力有限,你可以简单地使用 python -o 来摆脱文档字符串(以及断言,查找它)。

类型注释(PEP 484,例如 def foo(a: int) -> str:)存储在 function.__annotations__ 中:

>>> def foo(bar: int): pass
... 
>>> foo.__annotations__
{'bar': <class 'int'>}

这些注释显然也使用了一些空间(但甚至比文档字符串更少)。但是,它们对运行时执行没有影响(除非您明确使用 __annotations__

我建议您使用类型注释。由于静态分析/IDE,它们已经被引入,并且在记录您的类型方面绝对是 future 。 mypyjedi 和其他工具也有很多工作要做,以使类型注释在验证程序时更有用。已经使用类型注释,您将为将来做好准备。

关于python - 哪个效率更高 : Python docstrings or type-hints?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44389893/

相关文章:

python - 正弦曲线非线性拟合失败

php - 是否可以为一个参数指定多个类型提示?

python - Python 中的 itertools.count 使用什么类型?

python - 如何按日期 (mm/dd/yyyy) 对巨大的 csv 文件中的记录进行排序?

python - 使用子进程延迟执行命令

python - 如何为列表中的每个邻居调用函数?

python - 根据度中心性度量更改网络中图形的颜色和大小

python - 尝试在打印语句中用 % 替换普通 var

Python避免在生成器中重复调用函数

python - 类型提示中的子类