我最近从Matlab转到了Numpy而且很喜欢它。然而,我喜欢Matlab的一个非常好的事情是能够完成命令。它有两种方法:
1)标签完成。如果我有一个名为foobar(...)的函数,我可以做'fo',它会自动填入'foobar'
2)“按钮”完成(我不知道该怎么称呼它)。如果我最近输入了一个命令,如 'x = linspace(0,1,100); A =眼睛(50);' 然后我希望快速键入这个相同的命令,以便我可以重新评估它或稍微更改它,然后我只需键入'x ='然后按下它,它将循环显示所有先前用'x开头的键入的命令=”。这是Matlab中一个非常棒的功能(如果您已经听说过Julia,它允许您自动重新输入整个块代码,例如在您定义函数时,它已经做得更好了。在交互式提示下)
这两个特性似乎都不存在于普通的python交互式shell中。我相信tab autocomplete之前已经讨论过了,可以使用.pythonrc启动脚本和一些模块来启用它们。但是我没有找到任何关于“按钮”完成的信息。 Python 具有基本的按钮功能,可以简单地滚动所有以前的命令,但是你不能在命令的开头输入并缩小滚动的命令范围,并且这会带来巨大的变化。
任何人都知道如何在普通的python交互式shell上获得此功能,而不需要任何需要单独安装的IPython笔记本等奇特的东西?
答案 0 :(得分:1)
选项卡完成不是python 2.x解释器的标准功能。特定分发(打算,Linux发行版)可能附带启用标签完成的初始化文件。另一方面,python 3.x默认启用了自动完成功能。
要在2.x中启用标签页完成功能,您需要向口译员指示loading some startup code, using an environment variable
export PYTHONSTARTUP=$HOME/.whatever
要放入启动文件的代码各不相同,但启用标签页完成the docs have
try:
import readline
except ImportError:
print "Module readline not available."
else:
import rlcompleter
readline.parse_and_bind("tab: complete")
最终到了你的问题,你命名“按钮”命令完成,matlab / julia风格,IPython有它,我不知道一个实现它的模块,即使在我看来,我在一个月前在comp.lang.python上读过这样的野兽。
在你的问题中你引用了IPython的笔记本......可能有必要提醒你不需要笔记本界面来使用IPython,即使在文本中也可以充分利用它控制台。
答案 1 :(得分:0)
使用iPython或其他一些Python shell。有很多。你甚至可以自己编程,做任何你想做的事。
答案 2 :(得分:-1)
真的?您使用的是哪个版本的Python,以及如何获得它?对于我来说,它适用于Windows和Linux的常规python shell,包括python 2.7和python 3.4。听起来你的Python版本可能不是用readline
支持构建的,我认为这是这类事情所必需的。
这就是我的尝试:
>>> sup
tab
成为后的:
>>> super(
它被称为“历史搜索”,它也适用于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 here
上运行的说明