0

我最近从 Matlab 切换到 Numpy 并且喜欢它。然而,我喜欢 Matlab 的一件非常棒的事情是能够完成命令。它有两种方法可以做到这一点:

1)标签完成。如果我有一个名为 foobar(...) 的函数,我可以执行 'fo',它会自动填写 'foobar'

2)“向上按钮”完成(我不知道该怎么称呼它)。如果我最近输入了一个命令,例如 'x = linspace(0, 1, 100); A = 眼睛(50);' 然后我希望快速输入这个相同的命令,以便我可以重新评估它或稍微改变它,然后我只需输入“x =”,然后按下它,它将循环显示你之前输入的所有以“x”开头的命令='。这是 Matlab 中一个非常棒的功能(如果您听说过 Julia,它会做得更好,因为它允许您自动重新输入整个代码块,例如在交互式提示下定义函数时)

这两个功能似乎都没有出现在普通的 python 交互式 shell 中。我相信选项卡自动完成之前已经讨论过,并且可能可以使用 .pythonrc 启动脚本和一些模块来启用;但是我还没有找到任何关于“向上按钮”完成的信息。Python确实具有基本的向上按钮功能,可以简单地滚动浏览所有先前的命令,但是您不能在命令的开头键入并缩小滚动的命令范围,这会产生巨大的差异。

任何人都知道在普通的 python 交互式 shell 上获得此功能的任何方法,而无需使用需要单独安装的 IPython 笔记本等任何花哨的东西?

4

3 回答 3

1

制表符补全不是 python 2.x 解释器的标准功能。一个特定的发行版(有意的,Linux 发行版)可能附带启用选项卡完成的初始化文件。另一方面,python 3.x 默认启用了自动完成功能。

要在 2.x 中启用制表符完成,您需要使用环境变量指示解释器加载一些启动代码

export PYTHONSTARTUP=$HOME/.whatever

您要放入启动文件的代码各不相同,但为了启用选项卡完成,文档有

try:
    import readline
except ImportError:
    print "Module readline not available."
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")

最终来到你的第一个问题,你称之为“up-button”命令完成,matlab / julia风格IPython有它,我不知道实现它的模块,即使在我看来我读过一些东西一个月前在 comp.lang.python 上这样的野兽。

在您的问题中,您参考了 IPython 的笔记本......可能有必要提醒您不需要笔记本界面来使用 IPython,即使在文本控制台中也可以充分发挥其潜力。

于 2015-12-03T09:52:57.260 回答
0

使用 iPython 或其他 Python shell。有很多。你甚至可以编写自己的程序来做任何你想做的事情。

于 2015-12-01T22:48:26.650 回答
-1
  1. 选项卡完成。如果我有一个名为 foobar(...) 的函数,我可以执行 'fo',它会自动填写 'foobar'

真的吗?您使用的是哪个版本的 Python,您是如何获得它的?它适用于 Windows 和 Linux 的常规 python shell,同时具有 python 2.7 和 python 3.4。听起来您的 Python 版本可能没有在readline支持的情况下构建,我认为这是这类事情所必需的。

这是我尝试过的:

>>> sup

之后tab变成:

>>> super(
  1. “向上按钮”完成(我不知道该怎么称呼它)。如果我最近输入了一个命令,例如 'x = linspace(0, 1, 100); A = 眼睛(50);' 然后我希望快速输入这个相同的命令,以便我可以重新评估它或稍微改变它,然后我只需输入“x =”,然后按下它,它将循环显示你之前输入的所有以“x”开头的命令='。

它被称为“历史搜索”,它也适用于 Windows 和 Linux 的默认 Python shell。同样,我认为这需要readline.

>>> a = 'test'
>>> a

然后我按up,我得到:

>>> a = 'test'

您也可以按Ctrl+r,然后开始输入。这将搜索包含您键入的内容的最后一个命令的历史记录。因此,例如:

>>> a = 'test'
>>> b = 5
>>> c = a

然后ctrl+r

>>>
forward-i-search1`b: b = 5

然后点击Enter执行该命令。

>>>
>>> b = 5
>>>

如果匹配不是您想要的,您可以输入更多内容,或者Ctrl+r一次又一次地点击以循环匹配。

编辑

看起来这是内置 Mac Os X 版本的 Python 的一个已知问题。由于 readline 是 GPL,它不附带 readline。相反,它包括不完全兼容的 libedit。这里有关于如何让它在 Mac Os X 上运行的说明

于 2015-12-02T13:23:21.707 回答