2015-02-24 47 views
8

我注意到IPython有一些非常奇怪的解析行为,而不是合法的Python语法。为什么在IPython中将b = 1,2,3解析为(',b','=','1,2,3')?

In [1]: ,,b = 1,2,3 
Out[1]: (',b', '=', '1,2,3') 

有一些类似的分号发生,但它不分裂成一个元组。

In [4]: ;;foo = 1;2;3 
Out[4]: ';foo = 1;2;3' 

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

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 

为什么IPython中做到这一点?这是记录还是可配置的?

回答

7

它迫使报价的便捷方法,请参阅文档:http://ipython.org/ipython-doc/2/interactive/reference.html

从文档:

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

In [1]: ,my_function /home/me # becomes my_function("/home/me") 

如果 您使用 ';' 整个论点引述一个字符串,而 '' 上空白 分裂:

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") 

请注意, ','或';'必须是第一个字符!这不会 工作:

In [4]: x = ,my_function /home/me # syntax error 

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

In [260]: 

; 
Out[260]: 
'' 

一样只是一个逗号,

In [261]: 

, 
Out[261]: 
'' 

我不能看到任何地方,可以让你重写这个,我可能是错的,但它看起来像是硬编码的东西。

if (IPython.CodeCell) { 
    IPython.CodeCell.options_default.cm_config.autoCloseBrackets = false; 
} 

编辑

OK我发现了一个mail一篇关于这一点,你可以通过添加(或者,如果它不存在,创建)以下至.ipython/profile_default/static/custom/custom.js,这是未经测试将其关闭

关于你为什么,,b = 1,2,3正在接受治疗的最后一点不同,它看起来像白色的空间被引入某种突破,然后变成一个元组这样的:

In [9]: 

,,b = 

Out[9]: 
(',b', '=') 

比较没有空格:

+0

我认为JS是唯一的浏览器(我将非常惊讶,如果IPython的是在命令行中运行的JavaScript代码)。 – nneonneo 2015-02-24 16:59:36

+0

@nneonneo这是真的,我会尝试挖掘一个终端IPython – EdChum 2015-02-24 17:01:03

+0

谢谢,这解释了',foo'和'; foo',但我不明白为什么',b'被视为不同的和不作为函数调用。 – 2015-02-24 17:05:47

相关问题