Python 在可以返回不同类型参数的函数中使用类型提示有意义吗?

Python 在可以返回不同类型参数的函数中使用类型提示有意义吗?,python,types,Python,Types,我想检查字符串是否包含与regexp\ud{2}.匹配的子字符串(即,两位数字,然后是),如果包含,则返回数字部分。以下代码执行此操作: def extract_digits(string: str) -> int: match = re.search(r'_\d{2}\.', string) if match is not None: digits = match.group(0)[1:3] n = int(digits)

我想检查字符串是否包含与regexp
\ud{2}.
匹配的子字符串(即,两位数字,然后是
),如果包含,则返回数字部分。以下代码执行此操作:

def extract_digits(string: str) -> int:
    match = re.search(r'_\d{2}\.', string)
    if match is not None:    
        digits = match.group(0)[1:3]
        n = int(digits)
    else:
        n = None
    return n
可以通过在这些字符串上测试来验证:

wrong = "resnet50_coco_best_v2.1.0.h5"
right = "resnet50_csv_24.h5"
但是,我想知道对输出使用类型提示是否有意义,因为它可以是
NoneType
int
。请注意,下游代码优雅地处理
None
返回值,因此我怀疑的不是该函数是否会使我的代码崩溃。我唯一的困惑是,linter和解释器似乎都不关心返回参数可能有类型
int
,也可能没有类型


我认为这与类型提示的思想是一致的(它们是针对开发人员的提示,而不是针对解释器的指令)。但是,我是不是在使用类型提示,然后忽略它们?如果您想为该函数使用提示,您应该使用:


是的,我确实想使用提示,在这种情况下,
Optional
是完美的答案,正如您所注意到的。但是,如果您有其他建议,而不是使用提示,我正在听。@DeltaIV还有更一般的建议,因此您可以使用
Union[int,None]
(事实上,正如文档中提到的,这只是一个简写)。不确定您还可以使用什么。嗯,不,如果您仍然使用类型提示,那么
键入。可选的
显然是最好的选择(可读性和精确性)。我以为你在暗示(呵呵:-)使用的不是类型提示,但我误解了你。如果你使用某种类型的
联合
正确地键入提示,这是有意义的。。。甚至不确定你在问什么。显然,口译员不在乎。我不确定哪些linter可能集成或不集成类型提示,但如果您使用了
mypy
,它会抱怨您的输入错误function@juanpa.arrivillaga噢,
mypy
看起来很棒!感谢图书馆的推荐-P
from typing import Optional

def extract_digits(string: str) -> Optional[int]:
    match = re.search(r'_\d{2}\.', string)
    if match is not None:    
        digits = match.group(0)[1:3]
        n = int(digits)
    else:
        n = None
    return n