2016-03-04 197 views
1

Python3是否有類似於.NET的default keyword?也就是說,給定一個類型,它會生成一個通常被稱爲默認值的類型值。例如:Python3 - 默認值爲type的默認值?

default(int)0

default(decimal)0.0

default(MyCustomClassType)null

我希望這樣的事情已經存在,因爲我想從一個熊貓數據幀預處理值並用整數列中的0代替NaN,避免編寫我自己的函數(包含每個可能類型的巨型開關,以模仿我前面例舉的行爲,從.NET開始)。

任何指針將不勝感激。謝謝。

+5

'INT()''返回由0'默認和'浮動()''返回由0.0'默認。這有幫助嗎? – gtlambert

+0

@idjaw,並執行'x = something或int()'不滿足相同的需求? – Chris

回答

2

正如在評論中指出,Python的類型,如intfloatstrlist等都是可贖回,即可以使用int()並獲得0,或str()list(),並得到一個空字符串或列表。

>>> type(42)() 
0 

同樣也適用於numpy類型。你可以使用dtype屬性numpy的陣列的類型,然後用它來初始化「失蹤」的價值觀:

>>> A = np.array([1, 2, 3, 4, float("nan")]) # common type is float64 
>>> A 
array([ 1., 2., 3., 4., nan]) 
>>> A[np.isnan(A)] = A.dtype.type() # nan is replaced with 0.0 
>>> A 
array([ 1., 2., 3., 4., 0.]) 
>>> B = np.array([1, 2, 3, -1, 5]) # common type is int64 
>>> B 
array([ 1, 2, 3, -1, 5]) 
>>> B[B == -1] = B.dtype.type() # -1 is replaced with 
>>> B 
array([1, 2, 3, 0, 5]) 

這也適用於但是提供一個無參數的構造函數,其他類,其結果將是一流的,而不是null在你的榜樣的實例..

>>> class Foo(object): pass 
>>> type(Foo())() 
<__main__.Foo at 0x7f8b124c00d0> 
+0

這是非常好的,正是我所期待的,謝謝。 – user2916547