有没有可以在悬停变量上时显示其类型的Python IDE?
有时候我写完项目后,几个月都不去碰它。可惜的是,我会忘记当初在一个函数里应该传入什么东西。我希望能在鼠标悬停在一个参数上时,看到它的类型,比如整数、字符串、某个类等等。有没有什么开发工具可以帮我做到这一点?任何帮助都很感谢。
3 个回答
在 PyCharm 这个工具里,你可以按住 CTRL 键,然后把鼠标指向一个标识符(比如变量名),就能看到它被推断出来的类型。PyCharm 能根据赋值和返回值来推断很多类型,还可以通过文档字符串和 Python 3 的函数注解来推断参数和返回值的类型。
在Python中,我们不能在不运行代码的情况下,简单地推测变量的类型。即使运行了代码,很多Python代码也可以处理多种不同类型的数据,所以其实变量并没有一个唯一的类型。
举个例子,any
这个内置函数会遍历它的参数,如果其中有任何一个元素为真,就返回True
。听起来像是一个把布尔值列表转成布尔值的函数?其实不是。它只需要能被遍历的东西就行。这包括列表、元组、字典、集合、生成器等等,甚至用户自己定义的类,只要它们实现了迭代器协议。所以你根本无法仅仅通过调用any
来推测它是一个列表。而且在布尔上下文中,任何Python值都可以被评估为真或假,所以序列中的内容不一定非得是布尔值。
大多数代码并没有充分利用Python的“动态性”,通常每个变量只会放入单一类型的值。因此,理论上你可以使用一些注释和启发式方法来推测类型,但我不知道有没有哪个IDE尝试过这样做,我觉得这实际上并不太可行。
从根本上说,你需要有关于你的函数和类应该如何调用以及它们返回什么类型的文档。如果缺少这些知识,无论你是否有类型信息,你都会犯错误。
通常情况下,无法推断出类型,所以没有任何开发工具能够做到这一点。那为什么不直接使用文档字符串呢?
def foo(a, b):
"""
Take your arguments back, I don't want them!
a -- int
b -- str
"""
return a, b
在Python 3中,你还可以利用函数注解的功能:
def foo(a: int, b: str):
"""Take your arguments back, I don't want them!"""
return a, b