在 Python 3 中是否可以结合参数描述和类型提示?

fra*_*ans 3 python arguments type-hinting python-3.x mypy

在 Python 3 中,您可以为函数参数添加描述:

def foo(host: 'ip address for connection')
    cool_stuff()
Run Code Online (Sandbox Code Playgroud)

并且您还可以提供预期的类型,稍后可以使用mypy以下方法进行检查:

def foo(host: str)
    cool_stuff()
Run Code Online (Sandbox Code Playgroud)

两者在我看来都非常有用 - 有没有办法将两者结合起来并且仍然能够mypy检查一致性?

Jim*_*ard 5

不,这就是PEP 484编写的部分原因,以提供函数注释和类型提示的清晰和唯一使用。

具体在关于现有用途部分中,它指出:

一个论点指出 PEP 3107 明确支持在函数注释中使用任意表达式。然后认为新提案与 PEP 3107 的规范不兼容。

并继续说:

我们确实希望类型提示最终会成为注解的唯一用途,但这将需要额外的讨论和在 Python 的类型模块最初推出后的弃用期。

考虑了指定两者的替代方案,但由于代码可读性降低而明显被拒绝:

尽管有所有这些选项,但还是流传着一些提议,以允许类型提示和其他形式的注释为单个参数共存。一个提议建议,如果给定参数的注释是字典文字,则每个键代表不同形式的注释,并且键'type'将用于类型提示。这个想法及其变体的问题是符号变得非常“嘈杂”并且难以阅读。

允许两者同时也违背了这个 PEP 的观点,并破坏了注释的使用。最后,您最好的选择是使用好的 ol' docstrings 来记录参数,并坚持只使用函数注释来进行类型提示。