7.3 給函數(shù)參數(shù)增加元信息

2018-02-24 15:26 更新

問題

你寫好了一個(gè)函數(shù),然后想為這個(gè)函數(shù)的參數(shù)增加一些額外的信息,這樣的話其他使用者就能清楚的知道這個(gè)函數(shù)應(yīng)該怎么使用。

解決方案

使用函數(shù)參數(shù)注解是一個(gè)很好的辦法,它能提示程序員應(yīng)該怎樣正確使用這個(gè)函數(shù)。例如,下面有一個(gè)被注解了的函數(shù):

def add(x:int, y:int) -> int:
    return x + y

python解釋器不會對這些注解添加任何的語義。它們不會被類型檢查,運(yùn)行時(shí)跟沒有加注解之前的效果也沒有任何差距。然而,對于那些閱讀源碼的人來講就很有幫助啦。第三方工具和框架可能會對這些注解添加語義。同時(shí)它們也會出現(xiàn)在文檔中。

>>> help(add)
Help on function add in module __main__:
add(x: int, y: int) -> int
>>>

盡管你可以使用任意類型的對象給函數(shù)添加注解(例如數(shù)字,字符串,對象實(shí)例等等),不過通常來講使用類或著字符串會比較好點(diǎn)。

討論

函數(shù)注解只存儲在函數(shù)的 __annotations__ 屬性中。例如:

>>> add.__annotations__
{'y': <class 'int'>, 'return': <class 'int'>, 'x': <class 'int'>}

盡管注解的使用方法可能有很多種,但是它們的主要用途還是文檔。因?yàn)閜ython并沒有類型聲明,通常來講僅僅通過閱讀源碼很難知道應(yīng)該傳遞什么樣的參數(shù)給這個(gè)函數(shù)。這時(shí)候使用注解就能給程序員更多的提示,讓他們可以爭取的使用函數(shù)。

參考9.20小節(jié)的一個(gè)更加高級的例子,演示了如何利用注解來實(shí)現(xiàn)多分派(比如重載函數(shù))。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號