【问题标题】:Autocompletion in dynamic language IDEs, specifically Python in PyDev动态语言 IDE 中的自动完成,特别是 PyDev 中的 Python
【发布时间】:2011-03-29 19:09:40
【问题描述】:

我是 Python 新手,具有静态类型语言的背景,包括大量 Java。

在检查了特性/受欢迎程度等之后,我决定在 Eclipse 中使用 PyDev 作为 IDE。

我很惊讶自动完成功能似乎不适用于内置函数。例如,如果我在数据文件上尝试自动完成:

datafile = open(目录+"/"+account, 'r') 数据文件。

没有建议有用的方法(例如 realines)。只有调用之类的东西。

我习惯于通过跳入类定义并使用大量自动完成功能来快速查看类将做什么来学习一门语言。我的 PyDev '解释器' 用'强制内置' 设置得很好。

是否可以使用 PyDev 为内置函数自动完成?我是否错误地接近 IDE,即应该有一个解释器在旁边运行并用它测试东西?到目前为止,IDE 似乎很弱,例如2 分钟后,我的新 Mac 上出现 IDLE 段错误。我很想知道有经验的 Python 开发人员在探索不熟悉的(内置)模块时会做什么,因为这让我重新考虑我最初对 Python 的吸引力。我喜欢一门可以通过轻松探索学习的语言!

谢谢,

【问题讨论】:

  • 请注意,这在最新版本的 PyDev(当前为 5.7.0)中确实可以正常工作——尽管正如其他人指出的那样,通过 shell 进行试验可能非常好(请参阅交互式控制台:在 PyDev 上pydev.org/manual_adv_interactive_console.html 了解更多信息)。

标签: python ide autocomplete duck-typing built-in


【解决方案1】:

这里有比较懂行的可以给你详细解答。这是一个简短的。

动态类型语言的自动完成本质上永远不会像静态类型语言那样丰富。例如,在open 的情况下,在编写代码时无法确定返回类型是什么。与 Java 等静态类型语言不同,方法签名不包含 返回类型。因此,IDE 无法给您任何提示。

您当然应该在任何 Python 开发过程中运行 REPL。解释型语言的一个优点是您可以在进行过程中在 REPL 上测试一小段代码。它也是测试您对内置模块和其他模块如何工作的理解的好地方。

我在 Ubuntu 上工作,所以我不知道在 Mac 上运行 IDLE 是容易还是困难。我通常使用非常方便的iPython 来满足 REPL 需求,并使用 Pydev 进行其他开发(例如 Django)。您可能想尝试一下 iPython。

【讨论】:

  • 许多编译语言也有 REPL:GHCi 用于 Haskell,eShell 用于 Erlang,FSI 用于 F#...REPL 摇滚 :)
  • @elo80ka:是啊是啊。我的错误:)
  • 方法签名不是推断返回类型的唯一方法。如果一个函数跟随调用链足够远到不再模棱两可的地步,就可以推断出函数的返回类型。
【解决方案2】:

在我看来,Python shell 比依赖 IDE 更适合探索新模块。不要忘记,在 Python 中,您可以在 shell 中做任何可以在程序中做的事情,因为没有单独的编译步骤。而在shell中,你可以使用dir(x)来查找x的所有属性和方法,无论x是一个模块、一个类还是什么。

更好的是,增强的iPython shell 确实为所有对象提供了制表符补全。

事实上,正因为如此,许多 Python 程序员——包括我自己——根本不使用 IDE,而只是一个简单的文本编辑器(我使用 VIM)。

【讨论】:

    【解决方案3】:

    我很想知道经历了什么 Python 开发者在探索时会做 不熟悉的(内置)模块

    我使用ipython。 Ipython 是交互式 shell 的增强版本,它添加了制表符完成和对对象的文档字符串的快速访问。它还提供了许多标准 shell 不具备的其他功能 - 您可以找到它的功能摘要here

    【讨论】:

      【解决方案4】:

      你想要IPython。正如 Daniel 上面所指出的,交互式 shell 是探索 Python(事实上,大多数其他语言也是如此)的一种更好的方式。

      This 可能有助于在 OSX 上进行设置。

      【讨论】:

        【解决方案5】:

        您可能想看看 WingIDE。它会正确地自动完成您的数据文件。

        如果无法推断类型,可以使用assert之类的

        assert isinstance(datafile, file)
        

        帮助自动完成

        【讨论】:

        • PyDev 也可以这样做。
        【解决方案6】:

        我在工作中使用 PyDev,所以我知道你来自哪里。如果您愿意考虑其他工具,请查看JetBrains' PyCharm,这是我自己项目的新首选 Python IDE。没有什么从属关系可言,只是说我会在它退出测试版时接手它。 :)

        【讨论】:

          【解决方案7】:

          只是为了让新读者不会对 Pydev 的当前状态感到困惑——你给出的例子现在在 Pydev 中有效。 (顺便说一句,应该避免手动操作路径 - 改用 os.path.join)

          【讨论】:

            猜你喜欢
            • 2011-10-08
            • 2020-06-05
            • 1970-01-01
            • 2012-03-10
            • 2014-06-19
            • 2016-06-04
            • 2015-09-29
            • 1970-01-01
            • 2020-01-08
            相关资源
            最近更新 更多