当前位置: 首页 > 知识库问答 >
问题:

如何使用类型提示指定多个返回类型

薛祯
2023-03-14

我有一个python函数,可以返回boollist。有没有一种方法可以使用类型提示指定返回类型?

比如,这是正确的做法吗?

def foo(id) -> list or bool:
    ...

共有3个答案

岳出野
2023-03-14

语句def foo(客户id:str)-

描述“a或B”类型提示的原生方式是Union(多亏了Bhargav Rao):

def foo(client_id: str) -> Union[list, bool]:

或者,从Python 3.10及更高版本开始,使用|操作符

def foo(client_id: str) -> list | bool:

我不想成为“你为什么要这么做”的家伙,但也许你不想有两种返回类型:

如果希望返回BoL以指示某种特殊错误情况,请考虑使用异常来代替。如果您想将bool作为某个特殊值返回,那么空列表可能是一个很好的表示形式。您还可以指示None可以使用Optional[list]

丁承德
2023-03-14

如果有人在这里搜索“如何指定多个返回值的类型?”,使用元组[type_value1,...,type_valueN]

from typing import Tuple

def f() -> Tuple[dict, str]:
    a = {1: 2}
    b = "hello"
    return a, b

更多信息:如何注释多个返回值的类型?

宰父宾实
2023-03-14

从留档

类<代码>键入。联盟

联合型;并集[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。但是\uuuuu注释\uuuu将被设置为相应的值。

>>> foo.__annotations__ 
{'return': <class 'list'>, 'a': <class 'str'>}

请通过PEP 483了解更多关于类型提示的信息。另请参阅Python 3.5中的类型提示是什么??

请注意,这仅适用于Python3.5及以上版本。PEP 484中明确提到了这一点。

从Python3.10开始,有一种新的方式来表示这种结合。参见活接头类型:

union对象在多个类型对象上保存|(按位或)运算的值。这些类型主要用于类型注释。与类型化相比,联合类型表达式支持更简洁的类型暗示语法。协会

正如我们所看到的,这与键入完全相同。早期版本中的Union。我们前面的示例可以修改为使用以下符号:

def foo(client_id: str) -> list | bool:
 类似资料:
  • 问题内容: 假设我有一个函数: 如何为可以指定的东西指定返回类型? 问题答案: 您正在寻找。 由于您的返回类型可以是(从返回),也应该使用: 在有关打字的文档中,是以下内容的简写: 等价于。 其中表示类型或的值。 如果由于担心别人可能偶然发现而没有意识到它的含义而希望变得露骨,则可以始终使用: 但是我怀疑这是一个好主意,是一个指示性名称,它确实节省了几次击键。 正如@ Michael0x2a的注释

  • 假设我有一个函数: 如何指定可以为的返回类型?

  • 问题内容: 我想在当前的Python 3.5项目中使用类型提示。我的函数应该接收一个函数作为参数。 如何在类型提示中指定类型函数? 我检查了PEP 483,但在那里找不到函数类型提示。 问题答案: 正如@jonrsharpe在评论中指出的,可以使用以下方法完成: 问题是,将其本身翻译为: 一个Callable接受 任意数量的/类型的 参数,并返回任何类型的值。在大多数情况下,这不是您想要的,因为您

  • 我想使用此函数返回s的列表,但当以这种方式设置时,我会收到未选中的分配警告,因为返回的列表未指定包含s。这会导致生成失败。 尝试在返回语句中转换,但随后我得到一个未检查的转换警告 尝试指定列表类型时声明,但然后我还必须指定响应类型参数(-

  • 问题内容: 我如何使用类型提示来注释一个返回总是返回两个值的函数:a和a ?提示很接近,除了将返回值类型限制为元组,而不是生成器或其他可迭代类型。 我主要是好奇的,因为我想注释一个用于返回多个值的函数,如下所示: 通常函数喜欢做这样的事情(它返回一个元组),但我喜欢的类型暗示要足够灵活,以取代发电机或列表或别的东西返回的元组。 问题答案: 您总是返回 一个 对象;使用只需返回一个元组。 是的,完全

  • 我正在使用泛型在python中创建一个List类(类似于java列表的列表)。类节点也是通用的,我正在为上一个和下一个节点创建 getter 和 setters 方法。我想知道如何返回像类节点本身这样的类型?这是我的进步: 我试过 但它给了我错误