Python 是一門強類型的動態語言, 對於一個 Python 函數或者方法, 無需聲明形參及返回值的數據類型, 在程序的執行的過程中, Python 解釋器也不會對輸入參數做任何的類型檢查, 如果程序中存在非法的數據操作, 程序會在相應的位置停止執行, 並拋出異常. 對象的調用者也無需聲明所接收返回值的數據類型,所以這里就需要開發者在開發的過程中自行注意實參及所接收返回值的數據類型,並進行相應的業務處理.
def test_func(g, k):
try:
c = g + k
except Exception:
c = False
return c
如上面的示例, 函數 test_func 並不需要指明形參 g, k 及返回值的數據類型, 此時如果調用者傳遞了兩個不同數據類型的實參, 那么就會導致該函數拋出異常. 這時就需要我們在函數中進行相應的業務處理,
或者進行異常捕捉,否則就需要開發者在調用函數前review該函數,嚴格傳遞正確的數據類型,並了解到該函數有可能出現的返回值類型,如上面的示例中,就有可能返回布爾值.在Python代碼開發的過程中,
因為Python的這一特性,有時反而會加大我們不必要的開發時間成本
從Python3.6開始, 加入了數據類型的檢查功能,借助於現有IDE(如Pycharm)的高亮提示功能,在調用函數或者方法時,如果傳遞了錯誤的數據類型或者返回值數據類型異常,IDE會進行高亮,提示開發者及時進行更正,需要注意的是,這里只是進行提示開發者,但並不會要求你嚴格按照規則執行,更加不會因此而提升代碼性能,它只是用來提升代碼開發效率的一種方式而已,最起碼可以有效的減少代碼的調試時間
# g:int, k:int 提示形參的數據類型為 int
# -> int 提示返回值為 int
def test_func(g: int, k: int) -> int: return g + k
# 在IDE(pycharm)中, 如果是返回一個字符串,那么就會將該字符串進行高亮提示,但並不代表該程序無法執行 # return "lowman"
a: int = 1
b: str = 2 # 仍然能賦值成功
print(a + b) # 在IDE(pycharm)中, print 函數內的 b 參數被高亮, 但是程序仍然能執行, 結果輸出 int類型 3
所以,Python3.6版本新加入的類型檢查功能, 只能算是提升開發效率的輔助方式而已.Python中的變量仍然是可動態變化的.實際上Python的數據類型檢查是由Python解釋器在執行代碼時逐行進行完成的, 並動態的根據當前變量所指向的數據的類型為其指定,與其他語言(如Golang在使用變量之前必須先定義其數據類型,然后再根據其數據類型進行正確的賦值, Golang是強類型的靜態語言)是有着本質區別.只能說,動態特性也是一把雙刃劍