2012-03-27 67 views
1

所以我在想,为了在控制台应用程序中实现这样一个功能,在函数名的末尾添加一个问号将会倾吐出它的doc字符串,我可能会使用类似metaclasses的功能,其中定义/导入,我会复制所有的模块成员名称,并产生新的只是输入文档字符串。IPython如何?操作员实际工作?

然后我注意到你不需要实际的括号来调用助手函数,python实际上并不允许你在函数名的末尾加一个问号......所以这样做是在蟒蛇或我只是浪费我的时间试图弄清楚这一点?提前

回答

1

它没有按照您想象的方式完成。 ipython会将您的命令提示符输入作为一行文本读取,因此它有机会在它将它传递到eval(或其他)之前检查它是否以问号结束。如果确实如此,它将运行help(name)而不是您输入的内容。

AST看起来有点沉重,但您可以通过查看模块code了解它的工作原理。它给了你一个轻量级的解释器,如果你愿意的话,你可以用这种语法来扩展。

+0

非常多 - 实际上它将它翻译成'get_ipython()。magic(u'pinfo name')''。您可以使用'%hist -t'查看翻译的命令。 – 2012-03-28 22:08:30

0

IPython中使用AST

谢谢,你可以自定义语法解析,并创建一个新的IPython叉。

可能会帮助

+0

它采用AST,但不是这 - ?!代码有在创建一个AST之前是有效的Python语法,'name?'不是。 – 2012-03-28 22:09:30

+0

是的,你是真的 – pylover 2012-03-29 10:21:01

0

看一看在IPython.core.inputsplitter模块,它分析的东西像,/,%原始输入行的代码等