現來看如下示例:
def avg(first, *rest): return (first + sum(rest)) / (1 + len(rest)) # Sample use avg(1, 2) # 1.5 avg(1, 2, 3, 4) # 2.5
源程序只是為了演示變長參數的使用,不過 Python 2.7.1 的解釋器里,我得到的結果卻和注釋的結果不一樣
>>> def avg(first, *rest): ... return (first + sum(rest)) / (1 + len(rest)) ... >>> avg(1, 2) 1 >>> avg(1, 2, 3, 4) 2
可以很明顯的看到,小數點后的數據被截斷了,我記得兩個整數相除,"http://" 應該才是取整,難道我記錯了?
>>> def avg(first, *rest): ... return (first + sum(rest)) // (1 + len(rest)) # change '/' to '//' ... >>> avg(1, 2) 1 >>> avg(1, 2, 3, 4) 2
將 “/” 改成了“//”,得到的結果是一樣的,“//”的確是取整這一點我是沒記錯,不過為什么“/”的結果也是截斷了的?
同樣的程序我在 3.4.1 的解釋器里面做了測試,得到了預想的結果:
>>> def avg(first, *rest): ... return (first + sum(rest)) / (1 + len(rest)) ... >>> avg(1, 2) 1.5 >>> avg(1, 2, 3, 4) 2.5 >>> def avg(first, *rest): ... return (first + sum(rest)) // (1 + len(rest)) # change '/' to '//' ... >>> avg(1, 2) 1 >>> avg(1, 2, 3, 4) 2
可以看到在 3.4.1 的解釋器里,“/”的結果保留了小數位,而“//”則是取整后的結果
搜索之后,找到了stackoverflow上的這個問題:Python里如何強制除法的結果為浮點數? 注意這個是針對 2.x 的版本,3.x 里面并不存在這樣的問題
答案的前兩個解決方案,都很不錯:
方法1:
>>> from __future__ import division >>> a = 4 >>> b = 6 >>> c = a / b >>> c 0.66666666666666663
方法2:
類似于C語言里面的做法:
c = a / float(b)
相信本文所述實例會對大家的Python程序設計有一定的幫助。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com