2016-03-21 27 views
4

我覺得很奇怪的是,功能全面蟒返回numpy.float64當輸入爲numpy.float64但它返回一個int當 輸入是float。例如:行爲的類型的np.float64

from numpy import float64 
type(round(float64(3243.43))) 
>>> numpy.float64 
type(round(float(3243.43))) 
>>> int 

爲什麼round在第一行中返回一個numpy.float64而不是int?

注: 我使用:Python之3.5.1 [MSC v.1900 64位(AMD64)]

+0

我遇到同樣的例子,並返回我漂浮在兩種情況下 – efirvida

+0

@efirvida:您是在Python 2中,或者從他們改變行爲之前,一個Python 3版本。 – user2357112

+0

我使用python 2.7.9和numpy 1.8 – efirvida

回答

5

當參數不是一個Python浮子,有Python 2和3之間的行爲差​​異。

在Python 2.x中,round()會將參數轉換爲float。在Python 3.x中,round()調用參數的__round__方法。 __round__方法可以返回不同的類型。具體而言,當參數是int時,結果將是int

math.ceilmath.floormath.trunc進行了相同的更改。他們呼叫相應的__ceil__,__floor____trunc__方法。

有關詳細信息,請參閱PEP 3141

+0

我會將其添加到答案python 3.x中int的__round__方法返回一個整數。 – jfosoriot