Press "Enter" to skip to content

Python类型:可选项可以意味着强制执行

PYTHON编程

学习如何避免频繁的错用和误解typing.Optional。

Caroline Hall的照片,来自Unsplash

根据Python文档typing.Optional是一个方便的方式来表示对象可以是None的意思。这是一种简洁而优雅的表达方式,但是否也清晰明了呢?

让我来重新解释一下这个问题:当你在Python上下文中看到“可选”的时候,你认为它是什么意思?想象一下你看到一个名为x的参数,它具有Optional[int]类型。int部分相当清晰,很可能表示整数,但是Optional是什么意思?你的第一个想法是什么?

我们来考虑以下两个选项:

  1. 我不需要提供x的值,因为它是可选的。
  2. x的值可以是intNone

如果你足够了解Python的类型提示,你会知道选项2是正确的。但是当你不了解时…也许我错了,但是我无法想象一个不了解Python的人会选择选项2。选项1似乎更有意义。当我看到某个东西是可选的信息时,我认为…嗯,那就是可选的…

这个问题导致了对typing.Optional类型的频繁错误使用。本文旨在阐明这种误用,并引导您正确理解这种类型。

typing.Optional的含义

这三个类型提示是等效的:

from typing import Optional, Unionx: Union[str, None]x: Optional[str]x: str | None

它们都传达了同样的信息:即x可以是字符串或None。虽然完全有效,但第一个(Union[str, None])代表了Python类型提示的早期阶段:这是最初的方法,但现在不一定是首选的方法。然后,typing模块中添加了Optional,提供了一种更简洁和直观的表达方式。根据the mypy 文档

您可以使用Optional类型修饰符定义允许None的类型变体,例如Optional[int]Optional[X]Union[X, None]的首选缩写)。

Leave a Reply

Your email address will not be published. Required fields are marked *