IPython';s接线员真的工作吗?
所以我想,为了在控制台应用程序中实现这样一个功能,在函数名的末尾添加问号将输出它的文档字符串,我可能会使用类似元类的功能,在定义/导入时,我将复制所有模块成员名称,并生成新名称,仅用于键入文档字符串 然后我注意到调用helper函数不需要实际的括号,python实际上也不允许在函数名的末尾打问号。。。。那么,这是用python实现的,还是我只是在浪费时间试图弄明白这一点 提前感谢ipython使用,您可以自定义语法解析并创建新的ipython forkIPython';s接线员真的工作吗?,python,console,ipython,metaclass,Python,Console,Ipython,Metaclass,所以我想,为了在控制台应用程序中实现这样一个功能,在函数名的末尾添加问号将输出它的文档字符串,我可能会使用类似元类的功能,在定义/导入时,我将复制所有模块成员名称,并生成新名称,仅用于键入文档字符串 然后我注意到调用helper函数不需要实际的括号,python实际上也不允许在函数名的末尾打问号。。。。那么,这是用python实现的,还是我只是在浪费时间试图弄明白这一点 提前感谢ipython使用,您可以自定义语法解析并创建新的ipython fork 可能有帮助这不是你想象的那样。ipytho
可能有帮助这不是你想象的那样。ipython将命令提示符输入读取为一行文本,因此在将其传递到
eval
(或其他)之前,它有机会检查它是否以问号结尾。如果是,它将运行help(name)
,而不是您键入的内容
AST看起来有点笨重,但是您可以通过查看模块
code
来了解它是如何工作的。它为您提供了一个轻量级解释器,您可以根据需要使用这种语法进行扩展。查看IPython.core.inputsplitter
模块,了解解析原始输入行的代码,如?、!、/、%,等等。差不多-事实上它将其翻译成get_ipython().magic(u'pinfo name')
。您可以使用%hist-t
查看已翻译的命令。它确实使用AST,但不是为此使用AST-在生成AST之前,代码必须是有效的Python语法,而name?
则不是。