【问题标题】:Is there a python IDE that will tell you the type of a variable when you hover over it?当您将鼠标悬停在变量上时,是否有一个 python IDE 会告诉您变量的类型?
【发布时间】:2011-09-05 00:56:28
【问题描述】:

有时我写项目,直到几个月后才回来。不幸的是,我忘记了要传递给函数的内容。我希望能够将鼠标悬停在参数上并查看诸如整数、字符串、某个类等类型。是否有 IDE 可以为我执行此操作?任何帮助表示赞赏。

【问题讨论】:

  • 这就是文档字符串的用途。此外,变量在 Python 中没有类型。它们只是引用某个对象的名称,可能是任何东西,或“喜欢”某物(鸭子打字)。
  • 在 Python 中,变量没有类型。值(对象)具有类型,一个或多个名称可以引用一个值。尝试使用 cmets 或 docstrings。
  • 顺便说一句,Python is not Java。所以请不要指望它会一样工作。

标签: python eclipse vim emacs ide


【解决方案1】:

无法正常推断类型,因此任何 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

【讨论】:

    【解决方案2】:

    在 Python 中,如果不实际运行代码并查看它们最终引用的内容,就不可能一般地推断变量的类型。即便如此,许多 Python 代码也适用于许多不同的类型,因此实际上并没有真正唯一的变量类型。

    例如,any 内置函数迭代其参数并在其任何元素为真时返回 True。听起来像是从 bool 列表到 bool 的函数?错误的。它所需要的只是可以迭代的东西。这包括列表、元组、字典、集合、生成器和更多内置类型,更不用说实现迭代器协议的用户定义类了。因此,您甚至无法推断出这一点,因为any 被称为列表的东西。并且任何 python 值(我相信)都可以在布尔上下文中评估为真/假,因此序列的内容甚至不必是布尔值。

    大多数代码不使用 Python 的完整“动态”,并且只希望将单一类型的值放入每个变量中。所以理论上,你可以在某些时候使用一些注释和启发式来进行类型推断。我不知道有任何 IDE 尝试过这样做,而且我认为它实际上并不实用。

    从根本上说,您需要有关调用函数/类的方式以及它们返回什么类型的文档。如果你缺乏这方面的知识,不管你有没有类型信息,你都会犯错误。

    【讨论】:

    • 实际上,我认为 Eclipse 和 Netbeans 都使用启发式类型推断。不过效果不太好。
    • @Mechanicalsnail 我用过 Eclipse PyDev,虽然我没有充分发挥它的潜力。我没有注意到它推断类型(即,当我将鼠标悬停在变量上时,它似乎没有告诉我变量的类型,或者使用类型来通知自动完成)。当名称是在本地范围内直接定义的对象(或从直接定义的地方导入)并且是函数或具有属性时,它确实可以很好地处理非常明显的情况。我想其中至少有一点简单的类型推断。我从未使用或见过 Netbeans,所以我不知道它是什么样的。
    【解决方案3】:

    PyCharm 中,您可以按住 CTRL 并指向标识符以查看其推断类型。 PyCharm 可以从赋值和返回值中推断出许多类型,也可以从文档字符串和 python3 函数注释中推断出参数和返回类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 2018-08-19
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多