当前位置: 首页 > 面试题库 >

如何使用类型提示指定“空”返回类型

滕星纬
2023-03-14
问题内容

假设我有一个函数:

def get_some_date(some_argument: int=None) -> %datetime_or_None%:
    if some_argument is not None and some_argument == 1:
        return datetime.utcnow()
    else:
        return None

如何为可以指定的东西指定返回类型None


问题答案:

您正在寻找Optional

由于您的返回类型可以是datetime(从返回datetime.utcnow()),None也应该使用Optional[datetime]

from typing import Optional

def get_some_date(some_argument: int=None) -> Optional[datetime]:
    # as defined

在有关打字的文档中,Optional是以下内容的简写:

Optional[X]等价于Union[X, None]

其中Union[X, Y]表示类型X或的值Y

如果由于担心别人可能偶然发现Optional而没有意识到它的含义而希望变得露骨,则可以始终使用Union

from typing import Union

def get_some_date(some_argument: int=None) -> Union[datetime, None]:

但是我怀疑这是一个好主意,Optional是一个指示性名称,它确实节省了几次击键。

正如@ Michael0x2a的注释中指出的那样,Union[T, None]已转换为,Union[T, type(None)]因此无需在type此处使用。

在视觉上,这两种方法可能有所不同,但在编程上,结果是 完全相同的Union[datetime.datetime, NoneType]将是存储在get_some_date.__annotations__*中的类型:

>>> from typing import get_type_hints
>>> print(get_type_hints(get_some_date))
{'return': typing.Union[datetime.datetime, NoneType],
 'some_argument': typing.Union[int, NoneType]}

*用typing.get_type_hints抢的对象__annotations__直接访问它的属性来代替。



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

  • 我有一个python函数,可以返回或。有没有一种方法可以使用类型提示指定返回类型? 比如,这是正确的做法吗?

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

  • 为了概括这个问题,我借用了Zelenski CS课堂讲义中的材料。而且,这与我的具体问题有关,因为几年前我从另一位讲师那里学习了C语言的这种方法。讲义在这里。我对C的理解很低,因为我偶尔使用它。基本上,我需要编写一个程序的几次,我回到课堂材料,找到类似的东西,然后从那里开始。 在本例(第4页)中,Julie正在字符串函数中使用递归算法查找单词。为了减少递归调用的数量,她添加了一个决策点。 为了增加

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

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