【发布时间】:2016-08-28 21:29:23
【问题描述】:
我有一个简单的代码 sn-p,我将字典值设置为空列表:
new_dict = {}
for i in range(1, 13):
new_dict[i] = []
现在,如果在下一行的循环中输入 new_dict[i] 并添加一个点,我希望 PyCharm 向我显示可用于 list 的方法列表,但 PyCharm 无法识别字典值类型在这个简单的例子中:
为什么会发生这种情况,我该怎么办?使用 PyCharm 2016.1.2、Python 2.7.10。
作为一种解决方法,我可以显式添加 type hint,通过添加 # type: dict[int, list] 内联注释让 PyCharm 知道 new_dict 是一个字典,其中键是整数,值是列表:
【问题讨论】:
-
请记住,类型提示是在不运行任何代码的情况下进行的。我想不出很多情况下它能够可靠地猜测字典中存储了哪种数据。
-
如果在可以确定类型是什么的情况下实现了自动类型提示,那么我想很多人会抱怨它有问题/很少正常工作。您发布的示例或任何 python 文字的等效示例,或者可能是返回值被注释的函数调用,是我看到它运行良好的唯一时间。
-
由于键的“值”,值对几乎可以是任何东西,我认为要求 PyCharm 自动猜测值对象的类型非常困难。正如@TadhgMcDonald-Jensen 所说,PyCharm 实际上并没有运行你的 Python 代码,所以它不知道类型。似乎类型提示在这里是一个不错的选择。
-
似乎可以合理预期正上方的
new_dict[i] = []是一个足够的类型提示,但我认为“静态类型”风格的提示更容易解析。 -
类型提示的工作原理实际上已经给我留下了深刻的印象
标签: python list dictionary pycharm type-hinting