2017-08-14 22 views
3

文檔說,兩個相鄰的字符串文字是連接的。例如:連接相鄰字符串文字時的Python運算符優先級

>>>print("py" "thon") 
python 

然而,此功能是在編譯的時候,而不是像+和*運營商運行時實現的,因此出現這種有趣的效果:

>>>print(2 * "py" + "thon") 
pypython 
>>>print(2 * "py" "thon") 
pythonpython 

我理解爲什麼會這樣的語言,但我想不出是這樣的原因。是有原因的,還是容易讓它獨處?

+0

圍繞pythons要求把事情放在一條線上的又一個漏洞。 –

+0

我想這是因爲python在第一種情況下並未將字面串聯視爲操作。 https://docs.python.org/2/reference/lexical_analysis.html#string-literal-concatenation –

回答

1

坦率地說,如果我要設計出到今天python,我會做

print ("py" "thon") 

語法錯誤

print (5 3) 

我猜想,之所以串聯相鄰字符串,用於與bash/perl一致

echo "py""thon" 
+0

這是一個很好的觀點。現在我想到了,我知道沒有哪種情況下你將無法使用+運算符。 –

+1

爲了可視化目的,允許字符串字面串聯有充分的理由(請參閱:https://stackoverflow.com/questions/2504536/why-allow-concatenation-of-string-literals)。然而,問題是關於爲什麼這是在編譯時而不是運行時實現的 –