我现在有这个代码
T = TypeVar("T")
Grid = Sequence[Sequence[T]]
def columns(grid: Grid) -> Iterable[list[T]]:
return ([row[i] for row in grid] for i in range(len(grid[0])))
但是我认为别名Grid
中的T
绑定到函数返回类型中的不同T
。
如何定义Grid
,以便可以编写
def columns(grid: Grid[T]) -> Iterable[list[T]]:
...
我看过typing.GenericAlias
,但看不出它对我有什么帮助。
(我知道Sequence[Sequence[T]]并不能保证网格实际上是矩形的,但这不是我在这里想关注的问题。)
1条答案
按热度按时间ovfsdjhp1#
当使用类型变量作为泛型参数时,它可以被其他类型变量替换,这在泛型别名类型中提到(但我只找到了这一个):
泛型容器的
__getitem__()
方法将引发一个异常,以禁止类似dict[str][str]
的错误:然而,当使用类型变量时,这样的表达式是有效的。索引必须具有与
GenericAlias
对象的__args__
中的类型变量项一样多的元素。所以你当前的实现没有问题。在交互式解释器中,你会看到:
Mypy也会正确地分析它们: