2009-08-21 104 views
4

Python正在做字符串乘法,我期望它做數字乘法,我不知道爲什麼。Python字符串格式化和字符串乘法奇數

>>> print('%d' % 2 * 4) 
2222 
>>> print('%d' % (2 * 4)) 
8 

即使將類型強制爲整數也不做任何事情。 (我知道這是多餘的,但它是一個白癡檢查對我來說:

>>> print('%d' % int(2) * int(4)) 
2222 

很顯然,我解決我的問題(加上括號做它),但是這是怎麼回事。如果這僅僅是一個怪癖,我有什麼打算?請記住,這很好,但我寧願瞭解這背後的邏輯

回答

12

遇到運算符優先級

python %*具有相同的優先級,所以它們從左到右分組。

所以,

print('%d' % 2 * 4) 

是一樣的,

print(('%d' % 2) * 4) 

這裏是蟒蛇operator precedence table

由於難以記住運算符優先規則,並且規則可能很精細,所以通常最好在表達式中鏈接多個運算符時簡單地使用明確的括號。

+0

不像接受我自己的答案那樣優雅,所以卡爾得到最簡潔和正確答案的檢查。 – Schof 2009-08-21 02:09:25

+0

「所以它們從左到右」具體來說,這是因爲「*」,「%」組的操作符具有左關聯性。 「**」組從右向左 – newacct 2009-08-21 05:50:25

+0

「您正在經歷運營商優先級。」那是爲了看醫生嗎? – balpha 2009-08-21 10:41:19

2

啊,我想我已經知道了,當然我發佈了該消息之後,當然這是一個操作順序的事情。正在計算格式,結果字符串與最後一個操作數的字符串相乘

當我鍵入:

>>> print '%d' % 2 * 4 
2222 

它原來是因爲如果我指定的優先順序是這樣的:

>>> print ('%d' % 2) * 4 
2222