为什么在IPython中将b = 1,2,3解析为(',b','=','1,2,3')?

Wil*_*hes 9 python ipython

我注意到IPython有一些非常奇怪的解析表现为不合法的Python语法.

In [1]: ,,b = 1,2,3
Out[1]: (',b', '=', '1,2,3')
Run Code Online (Sandbox Code Playgroud)

分号也有类似的东西,但它并没有分成一个元组.

In [4]: ;;foo = 1;2;3
Out[4]: ';foo = 1;2;3'
Run Code Online (Sandbox Code Playgroud)

虽然它看起来;意味着该行的其余部分被视为文字字符串,但情况并非总是如此:

In [5]: ,foo
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-5-f2137ad20ab5> in <module>()
----> 1 foo("")

NameError: name 'foo' is not defined

In [6]: ;foo
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-6-f2137ad20ab5> in <module>()
----> 1 foo("")

NameError: name 'foo' is not defined
Run Code Online (Sandbox Code Playgroud)

为什么IPython会这样做?这是记录还是可配置的?

EdC*_*ica 8

这是强制报价的便捷方法,请参阅文档:http://ipython.org/ipython-doc/2/interactive/reference.html

来自文档:

您可以使用或强制自动引用函数的参数; 作为一行的第一个字符.例如:

In [1]: ,my_function /home/me  # becomes my_function("/home/me") 
Run Code Online (Sandbox Code Playgroud)

如果你使用';' 整个参数被引用为单个字符串,而','在空格上分割:

In [2]: ,my_function a b c    # becomes my_function("a","b","c")
In [3]: ;my_function a b c    # becomes my_function("a b c")
Run Code Online (Sandbox Code Playgroud)

注意','或';' 必须是线上的第一个角色!这不起作用:

In [4]: x = ,my_function /home/me # syntax error
Run Code Online (Sandbox Code Playgroud)

例如,只;输出一个空字符串:

In [260]:

;
Out[260]:
''
Run Code Online (Sandbox Code Playgroud)

就像逗号一样,:

In [261]:

,
Out[261]:
''
Run Code Online (Sandbox Code Playgroud)

我无法看到任何允许你覆盖它的地方,我可能错了,但它看起来像硬编码的东西.

编辑

好的我发现了一个关于此的邮件,您可以通过添加(或创建,如果它不存在)以下来关闭它.ipython/profile_default/static/custom/custom.js,这是未经测试的:

if (IPython.CodeCell) {
    IPython.CodeCell.options_default.cm_config.autoCloseBrackets = false;
}
Run Code Online (Sandbox Code Playgroud)

关于你为什么,,b = 1,2,3被区别对待的最后一点,看起来白色空间正在引入某种中断,然后把它变成一个元组:

In [9]:

,,b =

Out[9]:
(',b', '=')
Run Code Online (Sandbox Code Playgroud)

比较没有空格:

In [10]:

,,b=
Out[10]:
',b='
Run Code Online (Sandbox Code Playgroud)