有“字符”的 PEP484 类型提示吗? [重复]

问题描述 投票:0回答:1

简而言之:是否有“字符”的 Python 类型提示,表示长度为 1

str
但不使用类型提示
str

我最近看到

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

>>> def foo(c: chr):
...   pass
... 
>>> foo('a')
>>> 

这提出的问题多于它给出的答案:

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

python python-typing
1个回答
1
投票

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

typing
模块的使用有关:

  • 如果您已经知道用户可以传递哪些字母,那么一个很好的方法是使用

    typing.Literal
    对象。我强烈建议学习文档中的示例 - 查看文档。请注意,仅当提前知道所有可能的值时才应使用此提示(再次查看示例);

  • 如果没有这样的知识 - 例如,当可以使用任何单个字符时,那么同样好的方法是使用

    typing.TypeVar
    - 查看文档。可以本着以下精神做一些事情:

import typing

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


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

此外,在定义

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

  • 最终,自然标注
    str
    永远不会失败。在文档字符串中指定预期参数是单个字符就足够了。
© www.soinside.com 2019 - 2024. All rights reserved.