向IPython添加语法?

向IPython添加语法?,python,ipython,Python,Ipython,我想对IPython(我的安装)添加一些语法更改。例如,我可能想用\+来表示。我想象我可以插入一些代码来处理输入并将其转换为实际的(I)Python,然后IPython可以自己处理。但我不知道该把密码放在哪里 (免责声明:不要为生产代码或供其他人查看/使用的代码而这样做。)下面是一个如何将“\+AB”转换为“a+b”的示例 请注意,这都是基于字符串的。此钩子在未计算的上下文中执行。这意味着您不能基于值为a或b进行条件转换。在那种情况下,魔术最适合你的需要 此外,在解析输入字符串时必须小心。在我的

我想对IPython(我的安装)添加一些语法更改。例如,我可能想用
\+
来表示。我想象我可以插入一些代码来处理输入并将其转换为实际的(I)Python,然后IPython可以自己处理。但我不知道该把密码放在哪里


(免责声明:不要为生产代码或供其他人查看/使用的代码而这样做。)

下面是一个如何将
“\+AB”
转换为
“a+b”
的示例

请注意,这都是基于字符串的。此钩子在未计算的上下文中执行。这意味着您不能基于值为
a
b
进行条件转换。在那种情况下,魔术最适合你的需要

此外,在解析输入字符串时必须小心。在我的示例中,由于拆分,下面的代码被破坏了
\+(a*b)c
。在这种情况下,您将需要一个标记化工具。IPython提供了一台变压器。它的工作原理类似于变压器,但它是通过令牌列表而不是整行来调用的

只需运行此代码即可添加过滤器。如果希望它在启动IPython时可用,可以将其保存为
.py
.ipy
文件并放入
~/.ipython/profile.*/startup


有什么理由支持“过于宽泛”的投票吗?它询问在哪里插入一些字符串处理代码。(过于宽泛:“可能的答案太多,或者好的答案对于这种格式来说太长了。)这不是通过向文件中添加几行字符串处理代码来完成的。更改语言的语法绝非易事。解决方案当然不适合这种格式的答案。@cel我问的是IPython,而不是Python。你熟悉IPython的工作原理吗?如果我问的是Python,你说的是假的。在12月读取大小:…(谷歌缓存,所以它将过期)。答案可以链接到类似的内容并给出简短的摘要。实际上,使用IPython输入转换器非常容易,但只要它被搁置,我就无法给出有效的答案。。。
from IPython.core.inputtransformer import StatelessInputTransformer

@StatelessInputTransformer.wrap
def my_filter(line):
    words = line.split()
    if line.startswith(r'\+ ') and len(words) == 3:
        return '{} + {}'.format(*words[1:])
    return line

ip = get_ipython()
ip.input_transformer_manager.physical_line_transforms.insert(0, my_filter())