Python 为函数参数注释两个精确的字符串

Python Annotate Two Exact Strings for Function Parameter

假设我有一个函数 foo,它接受一个参数 a。我想注释该函数以指示 a 应该只接受 2 个字符串 - 'string1''string2'

我目前拥有的是(python<3.10):

from typing import Union

def foo(a: Union['string1', 'string2']):
    pass

此外,有没有办法表明函数 return 是 2 组 2 种数据类型的元组?
foo 将 return 一个包含 2 个字符串和 2 个整数的元组,每次都在完全相同的位置

from typing import Tuple

def foo() -> Tuple[int, str, int, str]:
    return 1, 's1', 2, 's2'

我不想使用 Tuple[int, str] 因为订单应该被注释

您的第一个问题(旁注:请不要将两个单独的问题合二为一,这样更难回答和搜索)是关于 Literal type。会是

import sys
if sys.version_info < (3, 8):
    from typing_extensions import Literal
else:
    from typing import Literal

def foo(a: Literal['string1', 'string2']) -> None:
    pass

你的第二个问题有点奇怪,因为你显示的代码正是你需要的。 Tuple 接受任意数量的类型参数(包括 () 以指定空元组)。 Tuple[int, str, int] 是一个元组,由 3 个类型为 intstrint 的元素按此特定顺序组成。特殊情况:Tuple[int, ...](注意文字省略号 - 它是语法的一部分)表示仅包含 int 的任意长度的元组。包含任意数量的 intstr 的元组将是 Tuple[Union[str, int], ...]。 Fixed-length 元组(没有省略号)可以包含任何类型。您可以在 docs.

中阅读更多内容