2015-02-24 48 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

相關問題