在Python3 中提供了一種句法,用於爲函數聲明中的參數和返回值附加元數據。下面是添加了註解後的一個函數示例:
def clip(text:str, max_len:'int > 0'=80) ->str: # 有註解的函數聲明
"""在max_len前面或後面的第一個空格處截斷文本"""
end = None
if len(text) > max_len:
space_before = text.find(' ', 0, max_len)
if space_before >= 0:
end = space_before
else:
space_after = text.find(' ', max_len)
if space_after >= 0:
end = space_after
if end is None: # 沒找到空格
end = len(text)
return text[:end].strip()
函數聲明中的各個參數可以在:之後增加註解表達式。如果參數有默認值,註解放在參數名和=號之間。如果想註解返回值 在)和函數聲明末尾的:之間添加 ->和一個表達式。這個表達式可以是任何類型;註解中最常用的類型是類(如str和int)和字符串(如'int > 0'),在上述示例中,max_len參數的註解用的就是字符串。
註解不會做任何處理,只是存儲在函數的__annotations__屬性(一個字典)中!!!
我們可以將函數的__annotations__屬性打印出來,結果如下:
{'text': <class 'str'>, 'max_len': 'int > 0', 'return': <class 'str'>}
其中'return'鍵保存的是返回值的註解,即上述示例中函數聲明裏以 '->' 標記的部分。Python對註解所做的唯一的事情是,把它們存儲在函數的__annotations__屬性裏。僅此而已,Python不做檢查,不做強制、不做驗證,什麼操作都不做。換句話說,註解對Python解釋器沒有任何意義。註解只是元數據,可以供IDE、框架和裝飾器等工具使用。