【发布时间】:2022-01-26 15:40:08
【问题描述】:
我一直在尝试使用类型提示来加强几类代码。我正在努力解决嵌套问题。感兴趣的函数的参数是具有已知类型的对象的可迭代容器。我无法让我的 IDE 识别内部类型(这很方便。)
我在 PyCharm 上使用 python 3.9,但我在 Ipython 中得到了类似的自动完成结果。
当使用typing 模块之外的Iterable 类时,IDE 无法“透视”内部类型。 Collection 也是如此。但在外部容器上使用list 或tuple 时可以。
这是 IDE 问题还是有其他方法可以打包?能够向这个函数发送任何类型的可迭代,而不是硬编码它会很好......
from datetime import datetime
from typing import Iterable
Data_collection = Iterable[tuple[datetime, str]]
Data_list = list[tuple[datetime, str]]
def foo(bar: Data_collection):
bar[1][0]. # no type-hint on inner obj
def foo2(bar: Data_list):
bar[1][0]. # good type-hint on inner obj
像这样获取我 (PyCharm) 的结果:
【问题讨论】:
-
在你问这个问题之前,我从来没有注意到这让我感到困扰。不错。
-
这纯粹是一个 IDE 问题,但请考虑一下:
Iterable不一定支持索引,因此bar[1]甚至可能无效。Iterable唯一承诺的是__iter__方法。如果你想要一些可以被索引的东西,你想要Sequence。 -
啊,@chepner。是的,在这种情况下,索引并不重要,我认为我对索引的错误使用管控了这一点。当我以适当的方式遍历
iterable时,PyCharm 会按预期工作。
标签: python pycharm python-typing