简而言之:是否有“字符”的 Python 类型提示,表示长度为 1
str
但不使用类型提示 str
?
我最近看到
chr
用于此目的,除了直觉之外,我找不到任何东西来证明或反驳这是合适的。这显然是有效的 Python 语法。举例来说,
>>> def foo(c: chr):
... pass
...
>>> foo('a')
>>>
这提出的问题多于它给出的答案:
chr
是否被视为有效的类型提示,因为它是可调用的,并且所有类型都可由其构造函数“可调用”?似乎不会 - 一些快速实验表明 Python 实际上会接受任何定义的符号作为类型提示,无论它是否有意义。
我建议使用以下方法之一。几乎所有这些都与
typing
模块的使用有关:
如果您已经知道用户可以传递哪些字母,那么一个很好的方法是使用
typing.Literal
对象。我强烈建议学习文档中的示例 - 查看文档。请注意,仅当提前知道所有可能的值时才应使用此提示(再次查看示例);
如果没有这样的知识 - 例如,当可以使用任何单个字符时,那么同样好的方法是使用
typing.TypeVar
- 查看文档。可以本着以下精神做一些事情:
import typing
char = typing.TypeVar("char", str)
def foo(c: char) -> ...:
# TODO
此外,在定义
str
时,不要忘记将 char
作为参数。这意味着 char
可以是 str
的任何子类型。
str
永远不会失败。在文档字符串中指定预期参数是单个字符就足够了。