2015-02-24 13 views
8

IPython'un yasal Python olmayan sözdizimi için çok garip ayrıştırma davranışlarının olduğunu fark ettim.IPython'da neden b = 1,2,3 (', b', '=', '1,2,3') olarak ayrıştırıldı?

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

Noktalı virgüller ile devam eden benzer bir şey var, ancak bir tuple ayrılmıyor.

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 

Neden ipython bu işe yarar: Bu ; benziyor satırın geri kalanı bir dize olarak kabul edilir demektir iken

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

, bu her zaman böyle değildir? Bu belgelenmiş veya yapılandırılabilir mi? Dokümanlar http://ipython.org/ipython-doc/2/interactive/reference.html

:

cevap

7

Bu dokümanlar tırnak zorlanması için bir kolaylık yöntemi görecek

Sen, veya kullanarak bir işlevin bağımsız değişkenlerin alıntı otomatik zorlayabilir; Bir satırın ilk karakteri olarak. Örneğin: Kullanmak Eğer

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

; olurken bütün iddiası, tek bir dize alıntı '' boşluk üzerinde böler '':

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

'un ',' veya ';' satırındaki ilk karakter olması gerektiğini unutmayın! Bu işlem, eser: Örneğin

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

sadece ; boş bir dize verir: yaptığı gibi

In [260]: 

; 
Out[260]: 
'' 

sadece virgül ,:

In [261]: 

, 
Out[261]: 
'' 

Yapamam Bunu geçersiz kılmanıza olanak tanıyan herhangi bir yere bakın, yanılıyor olabilirim ama kodlanmış bir şeye benziyor.

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

DÜZENLEME

Tamam Bu konuda mail yazı bulundu, sen .ipython/profile_default/static/custom/custom.js aşağıdaki, bu test edilmedi ekleyerek (ya da yoksa oluşturarak) tarafından kapatabilirsiniz

: beyaz boşluk daha sonra başlığın içine bu döner mola çeşit sunuyor gibi ,,b = 1,2,3 tedavi ediliyor neden son noktayı düşünürsek

farklı görünüyor

In [9]: 

,,b = 

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

boşluk olmadan karşılaştır:

+0

ben JS (ipython komut en JavaScript kodu çalışıyormuş ben son derece sürpriz olurdu) sadece tarayıcılar için olduğunu düşünüyorum. – nneonneo

+0

@nneonneo bu doğru, Ben IPython – EdChum

+0

terminali için bir deneyin ve kazacağım Teşekkürler, bu, 'foo' ve '; foo' açıklar ama neden, 'b' farklı muamele görür görmez ve bir işlev çağrısı olarak değil. –