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.core
和 IPython.core.inputtransformer2??
【参考方案3】:
ipython使用AST,可以自定义语法解析,创建新的ipython fork。
可能有帮助
【讨论】:
它确实使用了 AST,但不是为此 - 代码必须是有效的 Python 语法才能创建 AST,而name?
不是。以上是关于IPython 的怎么样? (问号)操作员真的有效吗?的主要内容,如果未能解决你的问题,请参考以下文章
sql时候insert操作插入的中文变成问号"??"怎么解决
使用 IPython.display.image 显示来自网络的图像:有时有效,有时无效