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

时间:2019-05-22 16:22:30

标签: python types

我想检查一个字符串是否包含与正则表达式_\d{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"

但是,我想知道对输出使用类型提示是否有意义,因为它可以是NoneTypeint。请注意,下游代码会优雅地处理None返回值,因此我的疑问不是该函数是否会使我的代码崩溃。我唯一的困惑是,lint或解释器似乎都根本不在乎return参数的类型可能为int

我认为这与类型提示(它们是针对开发人员的提示,而不是针对解释程序的指令)的思想是一致的。但是然后,我在使用类型提示然后忽略它们时是Pythonic吗?

1 个答案:

答案 0 :(得分:1)

如果要对该功能使用提示,则应使用typing.Optional

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