對於Python我還是比較新的,我正在嘗試使用它的動態類型。有時候我有一個函數或者一個類,它需要一個特定類型的參數,但是可以得到另一個強制的類型的值。例如,它可能會得到一個float
,而是接收一個int或一個小數。或者它可能期望一個字符串,但是會接收一個定義了特殊方法的對象。在Python中強制/轉換爲正確類型的最佳位置
將參數強制轉換爲正確類型(及其原因)的最佳做法是什麼?我是否在函數/類或調用者中執行?如果在調用者中,我是否也在函數中檢查它?例如。
選擇1:
def myfunc(takes_float):
myval = float(takes_float)
myfunc(5)
備選方案2:
def myfunc(takes_float):
myval = takes_float
myfunc(float(5))
方案3:
def myfunc(takes_float):
assert isinstance(takes_float, float)
myval = takes_float
myfunc(float(5))
我已經閱讀this answer和this one,他們說在Python中檢查類型是「不好」的,但我不想浪費時間來追蹤編譯器以靜態類型語言即時拾取的非常簡單的錯誤。
不要使用'assert'那樣的。斷言意味着記錄在運行時不可能發生的條件,而不是用於驗證輸入。 – 2009-12-16 18:18:25
是的,除非有錯誤,否則不可能發生。在替代方案3中,調用者必須將值轉換,這將是一個錯誤。 – EMP 2009-12-16 21:48:51