我有一个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 –