2013-08-24 35 views
4

雖然代碼打高爾夫球我無意中發現了一個奇特的問題運算符優先級與字符串的運算方式相同嗎?

>>> print '%'+'-+'[1]+str(5)+'s'%'*' 

Traceback (most recent call last): 
    File "<pyshell#178>", line 1, in <module> 
    print '%'+'-+'[1]+str(5)+'s'%'*' 
TypeError: not all arguments converted during string formatting 

我的假設是話務員評價從左至右發生,但在這種特殊情況下,似乎即使它的字符串操作,%takes priority over+,並嘗試在連接之前評估's'%'*'並且失敗

這是一個已知的記錄行爲,或者還有一些對我而言並不明顯。

回答

4

是的,它記錄在here

無論對象操作如何,優先級在整個語言中都是一致的。其他任何東西都會令人生畏,因爲可以用'操作符'特殊方法構造對象 - 例如%,__mod__() - 具有任意行爲。如果對象也可以定義自己的優先規則,調試意外結果將變得更加困難。

+1

+1對於「其他任何情況都會造成可怕的混淆」 –

+0

+1鏈接到文檔 – Abhijit