Python 在可以返回不同类型参数的函数中使用类型提示有意义吗?
我想检查字符串是否包含与regexpPython 在可以返回不同类型参数的函数中使用类型提示有意义吗?,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)
\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