gpt4 book ai didi

python - 解构类型提示

转载 作者:行者123 更新时间:2023-12-05 07:44:14 25 4
gpt4 key购买 nike

我正在寻找一种巧妙的方法来使用 Python 的类型提示来转换非平凡的类型。

例如,从简单类型进行转换。

a = '5'
b: int = None

__annotations__['b'](a) # <int 5>

但是,我不知道如何去解析像下面这样更复杂的东西。

b: Optional[int] = None

__annotations__['b'] # typing.Union[int, NoneType]

必须有一种方法来解析这些类型注释,以便对 IDE 之类的东西有用。

最佳答案

澄清后编辑:

根据您的评论,我认为您是在询问应用程序(例如 IDE)如何解析类型注释以检查某些代码是否与它们兼容。

答案是:这是符合 PEP 484 的静态类型检查器(例如 mypy)的主要工作。 Mypy 有大约 50k 行代码,所以它并不简单。理论上,IDE 可以使用 mypy,从中获取所有错误消息,然后将相应代码标记为错误。但在实践中,PyCharm 和 WingIDE 从头开始​​实现了大致相同的功能。

如果您需要为自己的项目解析和验证类型提示,只需使用 mypy API .

如果你只需要解析类型注解,而不实际验证它们是否正确,你可以使用typed_ast module .

原答案:

类型提示意义上的转换旨在告诉类型检查器该变量的类型与它认为的不同,因为类型检查器对您的程序的理解有限。它没有提到如何将事物从一种类型转换为另一种类型,而且在绝大多数情况下,这种转换要么是模棱两可的,要么是不可能的。例如,您希望这些“转换”的结果是什么:

from typing import Dict
a = 5
b: Dict[int, int]
__annotations__['b'](a) # ??? (impossible)
c: Union[str, float]
__annotations__['c'](a) # ??? (ambiguous)

我试图猜测“为 IDE 解析类型注释”是什么意思,但没猜到。也许你可以澄清更多? IDE(例如 PyCharm 和 WingIDE)已经很好地解析类型注释,并使用它们,例如,在您键入时自动完成标识符。

关于python - 解构类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43033885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com