當python3使用地板除法(也許還與未來 python2),如,例如,在蟒3地板分割並不總是導致一個int
>>> 2//2
1
輸出是整數如預期。但只要一個操作數是浮點數,你會得到一個浮動的結果
>>> 2.0//2.0
1.0
>>> 2.0//2
1.0
>>> 2//2.0
1.0
我想這是有意的,但實際上我不明白,爲什麼它應該是這個樣子。使用以前確定的數據類型作爲總是產生整數的操作的結果的設計概念是什麼?
一個非常廣泛的搜索給了我(從PEP 238)的最佳
樓司的語義
樓師將在所有的Python數字 類型來實施,將有
語義a // b == floor(a/b)
除了結果類型是在t之前強制 和b的公共類型他操作。
具體地,如果a和b是相同類型的,一個// B將是 該類型太。如果輸入是不同類型的,那麼它們是 首先使用與其他算術運算符相同的規則強制爲一個通用類型。
特別是,如果a和b均爲整數或多頭,結果具有 相同的類型和值作爲用於對這些類型 (包括混合輸入類型的情況下,經典劃分; INT //長和長//int 都會返回一個很長的)。
對於浮點輸入,結果是浮點數。例如:
3.5//2.0 == 1.0
爲複數,//引發一個例外,因爲地板(一個 複數)是不允許的。
對於用戶定義的類和擴展類型,所有語義是向上 到類或類型的實現。
但是這仍然沒有解釋爲什麼行爲是這樣實現的。
「對於浮點輸入,結果是一個浮點數」,所以......也許輸入處的「s」誤導 – 2014-03-05 21:06:54
爲什麼不能?有一個很好的文檔輸出類型... – mgilson
@mgilson「充分記錄的輸出時間」也可以是「int」。 – delnan