在一些Python的工程項目中,我們會看到函數參數中會有冒號,有的函數後面會跟着一個箭頭,你可能會疑惑,這些都是什麼東西?
其實函數參數中的冒號是參數的類型建議符,告訴程序員希望傳入的實參的類型。函數後面跟着的箭頭是函數返回值的類型建議符,用來說明該函數返回的值是什麼類型。
更官方的解釋:此爲type hints,是Python 3.5新加的功能,作用如上所述,官方文檔爲 https://www.python.org/dev/peps/pep-0484/
值得注意的是,類型建議符並非強制規定和檢查,也就是說即使傳入的實際參數與建議參數不符,也不會報錯。我認爲類型建議符的作用更多的體現在軟件工程方面:在多人合作的時候,我們對他人開發的代碼並不熟悉,沒有對類型的解釋說明的話,往往需要花費更多的時間才能看出函數的參數和返回值是什麼類型,有了說明符,可以方便程序員理解函數的輸入與輸出(具體涉及到的工作,比如靜態分析與代碼重構)。
下面我們以一個簡單的函數twoSum爲例,該函數計算的是兩個輸入參數的和:
#!/usr/bin/python3 # -*- coding:utf-8 -*- def twoSum(num1: int, num2: int=100) -> int: sum = num1 + num2 return sum if __name__ == "__main__": print(twoSum.__annotations__) print(twoSum(1,2)) print(twoSum(1)) print(twoSum('I love ','Arsenal')) #print(twoSum('Arsenal'))
{'num1': <class 'int'>, 'num2': <class 'int'>, 'return': <class 'int'>} 3 101 I love Arsenal
幾點解釋:
- 第一行輸出中的__annotations__是函數的保留屬性,保存的是函數聲明中的註釋內容,比如我們使用的對參數"num1","num2"和返回值的建議類型。
- 第二行輸出是正常用法。
- 第三行輸出驗證了:註釋內容後可以跟等號"=",意思爲未傳入實參時,該參數獲得的默認值
- 第四行輸出則驗證了該解釋說明符並非強制檢查,我們傳入了兩個str實參,並不會報錯,而是繼續進行函數中的加法運算。如果傳入的兩個實參無法進行函數中規定的運算,則會正常報錯。
參考鏈接:
1 python函數註釋,參數後面加冒號:,函數後面的箭頭→是什麼?