我有一個python函數,可以返回bool
或list
。有沒有辦法使用類型提示來指定返回類型。如何使用類型提示指定多個返回類型
例如,這是正確的方法嗎?
def foo(id) -> list or bool:
...
我有一個python函數,可以返回bool
或list
。有沒有辦法使用類型提示來指定返回類型。如何使用類型提示指定多個返回類型
例如,這是正確的方法嗎?
def foo(id) -> list or bool:
...
類
typing.Union
聯盟類型; 聯盟[X,Y]意指X或Y
因此表示多於一個返回數據類型的正確方法是
from typing import Union
def foo(client_id: str) -> Union[list,bool]
但做注意,打字沒有執行。 Python仍然是一種動態類型的語言。註釋語法的開發有助於在開發代碼之前將其發佈到生產環境中。正如PEP 484所述,「運行時不會發生類型檢查。」
>>> def foo(a:str) -> list:
... return("Works")
...
>>> foo(1)
'Works'
正如你所看到的,我正在傳遞一個int值並返回一個str。但是__annotations__
將被設置爲相應的值。
>>> foo.__annotations__
{'return': <class 'list'>, 'a': <class 'str'>}
請通過PEP 483爲更多類型的提示去。另見What are Type hints in Python 3.5?
請注意,這僅適用於的Python 3.5向上。這在PEP 484中明確提到。
是否有Python 3.4中的等價物 –
@YahyaUddin Nope - [PEP 484](https:// www.python。org/dev/peps/pep-0484 /):'(....它僅適用於Python3.5以上版本。 –
但是我知道類型提示仍然適用於Python 3.4以及'def foo(id:str)'。這是否也是類型提示? –
陳述def foo(client_id: str) -> list or bool:
評估時相當於 def foo(client_id: str) -> list:
,因此不會做你想做的。
描述「A或B」型提示本機方式是Union(感謝Bhargav饒):
def foo(client_id: str) -> Union[list, bool]:
我不想成爲「爲什麼你無論如何要做到這一點「傢伙,但可能有2種返回類型不是你想要的:
如果你想返回一個bool來指示某種類型的特殊錯誤情況,請考慮使用Exceptions來代替。如果你想返回一個布爾值作爲一些特殊值,也許一個空列表將是一個很好的表示。 你也可以指出,None
可能會返回Optional[list]
有些用途可能會返回多種類型:例如,如果您需要返回某些子類型集合中的一個,但不返回其他子類型,或者您正在嘗試處理數據並希望在處理時返回原始表單不可用。另外,如果你打包遺留代碼,它可能非常有用,因爲它有助於升級過程和/或看到尷尬的地方。 –
異常和空列表的想法也很有幫助。謝謝 –
你如何最終與列表或布爾? –
@PadraicCunningham也許實現是*我會發給你我的ID,你給我一個列表或布爾*:D –