仅返回一组特定值的函数的类型提示

2025-02-25 09:07:00
admin
原创
23
摘要:问题描述:我有一个函数,它只能返回a,b或者c,它们都是 类型T。我想在签名中包含这个事实,因为它们在函数上下文中具有特殊含义。我该怎么做?目前,我用的是这个def fun(...) -> "a or b or c": #briefly explain the meaning...

问题描述:

我有一个函数,它只能返回ab或者c,它们都是 类型T。我想在签名中包含这个事实,因为它们在函数上下文中具有特殊含义。我该怎么做?

目前,我用的是这个

def fun(...) -> "a or b or c":
    #briefly explain the meaning of a, b and c in its docstring

那是正确的吗?

我知道我能做到

def fun(...) -> T:
    # briefly explain the meaning of a, b and c in its docstring

但正如我所说,我想在签名中表达该函数只返回那些特定的值。


解决方案 1:

您可以使用文字类型来做到这一点。

from typing_extensions import Literal
# from typing import Literal  # Python 3.8 or higher

def fun(b: int) -> Literal["a", "b", "c"]:
    if b == 0:
        return "a"
    if b == 1:
        return "b"
    return "d"

mypy 能够将其检测return "d"为无效语句:

error: Incompatible return value type (got "Literal['d']",
expected "Union[Literal['a'], Literal['b'], Literal['c']]")

Python 3.8

得益于PEP 586,它Literal已默认包含在 Python 3.8typing模块中。

解决方案 2:

您无法仅使用类型提示来指定函数仅返回类型值的子集。顾名思义,类型提示与类型有关,而非值。

但是,您可以创建一个enum.Enum仅包含您要返回的值的新子类型并在函数中使用它。然后您可以键入提示,表明您正在返回枚举类型。

import enum

class cmp_results(enum.IntEnum):
    less = -1
    equal = 0
    greater = 1

def my_cmp_function(x, y) -> cmp_results:
    if x < y: return cmp_results.less
    elif x == y: return cmp_results.equal
    else: return cmp_results.greater

这可能有点过头了。仅仅暗示int返回类型(并记录具体值)可能就足够了。

解决方案 3:

如果所有都是相同的类型,只需将其添加为返回类型

def func(...) -> T: # or int or whatever else

我想在签名中表达该函数只返回那些特定的值

类型提示不指定名称或值,它们只指定类型;类型检查器会尝试根据提供的类型采取行动。

如果您只是为了文档目的而这样做,请'a or b or c根据需要添加 ' ;用户会理解它,但类型检查器不会理解,而且他们肯定不会对其采取行动。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1343  
  信创产业的蓬勃发展推动着各行业数字化转型加速,数据库迁移作为其中关键一环,面临诸多挑战。信创数据库迁移旨在将传统数据库平稳过渡到信创环境,以满足自主可控、安全可靠的需求。这一过程涉及技术、业务等多方面因素,稍有不慎就可能出现各种问题,影响业务的正常运行。深入探讨信创数据库迁移过程中的常见问题及解决方案,对于保障迁移工作...
2027年信创国产化   41  
  随着信息技术的飞速发展,信创国产化成为了国家战略的重要组成部分。国产化信创产品名录涵盖了众多领域,其在各个关键应用场景中发挥着重要作用。而信创国产化操作系统作为其中的核心环节,具备五大核心优势,为我国信息技术产业的自主可控发展提供了坚实支撑。关键应用场景之办公领域在办公领域,国产化信创产品有着广泛且深入的应用。如今,越...
国产信创系统   37  
  随着信息技术的飞速发展,信创国产化操作系统在政府部门的推广应用具有重要的战略意义。它不仅关乎国家信息安全,更是推动国内信息技术产业自主创新、实现科技自立自强的关键举措。在当前复杂的国际形势下,政府部门积极推广信创国产化操作系统,对于保障国家政务信息的安全稳定运行,提升信息技术的自主可控能力,具有不可替代的重要作用。推广...
信创产品有哪些   28  
  在企业数字化转型的进程中,信创数据库解决方案的选择至关重要。它不仅关乎企业数据的安全存储与管理,更影响着企业业务的稳定运行与未来发展。合适的信创数据库能够助力企业在复杂多变的市场环境中提升竞争力,保障数据主权与安全。然而,面对市场上众多的信创数据库产品和解决方案,企业往往感到困惑,不知如何做出正确的选择。接下来,我们将...
信创电脑   24  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用