Python 3如何对无值的索引参考位置进行类型标注?
Python 索引对象的显式类型声明方法
基础整数索引标注
如果你的索引仅为整数类型,直接和普通变量、参数的标注规则一致即可:
# 索引变量标注 index: int = 2 my_list = [1,2,3,4] print(my_list[index]) # 函数参数中的索引标注 def get_item(data: list, index: int): return data[index]
通用合法索引类型标注
如果需要兼容所有Python支持的合法索引类型(包括切片、自定义可索引对象),可以使用typing.SupportsIndex(Python 3.8+ 支持,3.10+ 也可从collections.abc导入)做标注,这个类型可以完美匹配你「维护值的引用、不提前计算具体值」的需求:
from typing import SupportsIndex # 标注所有合法索引类型 index: SupportsIndex # 示例1:使用切片作为索引 index = slice(1, 5, 2) print([1,2,3,4,5][index]) # 示例2:自定义懒加载索引类,仅在实际使用时才计算具体值 class LazyIndex: def __init__(self, base: int, offset: int): self.base = base self.offset = offset # 实现__index__方法即可被Python识别为合法索引类型 def __index__(self) -> int: return self.base + self.offset # 此时仅保存对象引用,不会计算具体索引值 index = LazyIndex(1, 2) # 运行到取值操作时才会触发__index__计算出具体索引值3 print([10,20,30,40][index])
注意:Python的类型标注仅用于静态类型检查,不会改变运行时逻辑,只要你没有主动触发索引值的计算逻辑,就可以正常维护对象的引用地址,不会提前计算出具体值。
内容的提问来源于stack exchange,提问作者Oliver Haken
相关产品推荐
相关产品推荐

