IPython 的怎么样? (问号)操作员真的有效吗?

Posted

技术标签:

【中文标题】IPython 的怎么样? (问号)操作员真的有效吗?【英文标题】:how does IPython's ? (question mark) operator actually work? 【发布时间】:2012-04-10 16:51:44 【问题描述】:

所以我在想,为了在控制台应用程序中实现这样的功能,在函数名称的末尾附加一个问号会倒出它的文档字符串,我可能会使用像元类这样的功能,其中在定义/导入时,我会复制所有模块成员名称并生成新的名称,仅用于输入文档字符串。

然后我注意到您不需要实际的括号来调用辅助函数,并且 python 实际上并不允许您在函数名称的末尾放置一个问号......所以这是在 python 中完成的还是我只是在浪费时间试图弄清楚这一点?

提前致谢

【问题讨论】:

【参考方案1】:

这不是你想象的那样。 ipython 将您的命令提示符输入读取为一行文本,因此它有机会检查它是否以问号结尾,然后再将其传递给eval(或其他)。如果是,它将运行 help(name) 而不是您输入的内容。

AST 看起来有点繁重,但您可以通过查看模块 code 来了解它的工作原理。它为您提供了一个轻量级的解释器,您可以根据需要使用这种语法进行扩展。

【讨论】:

差不多 - 实际上它将它翻译成get_ipython().magic(u'pinfo name')。您可以使用%hist -t 查看翻译后的命令。【参考方案2】:

查看 IPython.core.inputsplitter 模块中的代码,该模块将原始输入行解析为 ?、!、/、% 等内容。

【讨论】:

现在 IPython.core.inputsplitter 已弃用,取而代之的是 IPython.core.inputtransformer2 ipython.readthedocs.io/en/7.28.0/api/generated/… 或尝试 import IPython.coreIPython.core.inputtransformer2??【参考方案3】:

ipython使用AST,可以自定义语法解析,创建新的ipython fork。

可能有帮助

【讨论】:

它确实使用了 AST,但不是为此 - 代码必须是有效的 Python 语法才能创建 AST,而 name? 不是。

以上是关于IPython 的怎么样? (问号)操作员真的有效吗?的主要内容,如果未能解决你的问题,请参考以下文章

一个 URL 中有多个问号是不是有效?

sql时候insert操作插入的中文变成问号"??"怎么解决

使用 IPython.display.image 显示来自网络的图像:有时有效,有时无效

仅带有参数(以问号开头)的链接/ href 是不是有效?

将 ansi 打印到 windows cmd 在 IPython 中有效,但在其他任何地方都无效。为啥?

ipython 安装新模块