You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中为嵌套泛型定义TypeAlias?

解决泛型类型别名的绑定问题

核心解决方案

要让Grid成为可参数化的泛型类型别名,从而实现Grid[T]的写法,有两种实用方式:

1. Python 3.10+ 推荐写法

使用typing.TypeAlias明确声明泛型别名,语法更直观:

from typing import TypeVar, Sequence, Iterable, TypeAlias

T = TypeVar("T")
Grid: TypeAlias = Sequence[Sequence[T]]

def columns(grid: Grid[T]) -> Iterable[list[T]]:
    return ([row[i] for row in grid] for i in range(len(grid[0])))

2. 兼容Python 3.9及更早版本

用GenericAlias手动创建泛型别名实例,适配旧版本环境:

from typing import TypeVar, Sequence, Iterable, GenericAlias

T = TypeVar("T")
Grid = GenericAlias(Sequence, (Sequence[T],))

def columns(grid: Grid[T]) -> Iterable[list[T]]:
    return ([row[i] for row in grid] for i in range(len(grid[0])))

原写法的问题原因

你之前的Grid = Sequence[Sequence[T]]是将Grid绑定到了使用当前T的具体类型,而非可复用的泛型模板。此时函数中的Grid和返回值的T是两个独立的类型变量,无法建立关联。而泛型类型别名允许你在使用时显式传入类型参数(Grid[T]),确保输入输出的T指向同一个类型变量。

内容的提问来源于stack exchange,提问作者Chris Wesseling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:25:18