是否有“字符”的 PEP484 类型提示?

Rei*_*ien 12 python type-hinting

简而言之:是否有“字符”的Python类型提示,表示长度为一str但不使用类型提示str

我最近看到chr用于此目的,除了直觉之外,我找不到任何东西来证明或反驳这是合适的。这显然是有效的 Python 语法。举例来说,

>>> def foo(c: chr):
...   pass
... 
>>> foo('a')
>>> 
Run Code Online (Sandbox Code Playgroud)

这提出的问题多于它回答的问题:被chr认为是有效的类型提示,因为它是可调用的,并且所有类型都可以由其构造函数“调用”?似乎不会——一些快速实验表明,Python 实际上会接受任何定义的符号作为类型提示,无论它是否有意义。

Ser*_*nov 1

我建议使用以下方法之一。几乎所有这些都与模块的使用有关typing

  • 如果您已经知道用户可以传递哪些字母,那么一个很好的方法就是使用该typing.Literal对象。我强烈建议您研究文档中的示例 -查看文档。请注意,仅当提前知道所有可能的值时才应使用此提示(再次查看示例);

  • 如果没有这样的知识 - 例如,当可以使用任何单个字符时,那么同样好的方法是使用typing.TypeVar-查看文档。可以本着以下精神做一些事情:

import typing

char = typing.TypeVar("char", str)


def foo(c: char) -> ...:
    # TODO

Run Code Online (Sandbox Code Playgroud)

此外,在定义 时不要忘记将其作为str参数char。这意味着char可以是 的任何子类型str

  • 最终,自然标注str永远不会失败。在文档字符串中指定预期参数是单个字符就足够了。