Python中是否有内置方法验证tuple[int, ...]类型提示?最低支持版本是多少?
好问题!其实从Python 3.10开始,标准库就提供了专门的工具来做这种泛型类型的实例检查,不用自己手动遍历验证元素类型。
可用的标准库方法
在Python 3.10及以上版本中,你可以使用typing.isinstance函数(Python 3.11及以后也可以用types.isinstance,两者功能完全一致)来直接验证tuple[int, ...]这类泛型类型。这个函数会自动帮你完成两步检查:首先确认输入是元组,然后遍历所有元素验证是否都是整数。
举个修改后的示例代码:
from typing import isinstance as typing_isinstance def add_nums(nums: tuple[int,...]) -> int: # 用typing.isinstance直接做泛型类型检查 if not typing_isinstance(nums, tuple[int,...]): raise TypeError(f"nums isn't a tuple of integers. You provided >{nums}<." ) return sum(nums) # 顺便提一句,sum可以直接替代循环求和,写法更简洁
最低支持版本
这个方法的最低支持Python版本是3.10,typing.isinstance正是在这个版本中被引入,用来填补原生isinstance不支持泛型类型检查的空白。
兼容旧版本的方案
如果你的代码需要运行在Python 3.9及以下版本,那确实只能用你一开始想到的手动验证方式,不过可以简化一下写法:
def add_nums(nums: tuple[int,...]) -> int: if not isinstance(nums, tuple) or not all(isinstance(num, int) for num in nums): raise TypeError(f"nums isn't a tuple of integers. You provided >{nums}<." ) return sum(nums)
注意:原生的isinstance(nums, tuple[int, ...])在任何Python版本里都会抛出错误,因为原生isinstance不识别泛型类型参数,必须使用专门的typing.isinstance或types.isinstance。
内容的提问来源于stack exchange,提问作者Christian Blackburn
相关产品推荐
相关产品推荐

