Overly broad type inference when using zip(*x) to tranpose 2d iterable
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
研究方向
開啟連結的 zip 定義中的 stdlib/builtins.pyi,並比較現有的 overload 與提議的 3.10 之前和 3.10+ 簽名。確認對於 Iterable[Iterable[T]],zip(*x) 會被推斷為 zip[tuple[T, ...]],而不是 zip[tuple[Any, ...]],同時維持嚴格處理。
由索引模型根據 Issue 內容生成。
描述
Description:
When transposing a 2d iterable x: Iterable[Iterable[T]] using zip(*x), I've noticed typeshed's type annotations result in the return type being inferred as zip[tuple[Any, ...]] rather than the expected zip[tuple[T, ...]]. It would be nice if builtins.py^1 had an overload for this use case.
Expected behavior
When x has type Iterable[Iterable[T]], the expression zip(*x) should be inferred as zip[tuple[T, ...]], preserving the element type information through the transpose operation.
Actual behavior
The expression zip(*x) is inferred as zip[tuple[Any, ...]].
Possible solution
Add the following overloads to zip:
Pre 3.10:
@overload
def __new__(
cls,
*iterables: Iterable[_T1],
) -> zip[tuple[_T1, ...]]: ...
3.10 or later:
@overload
def __new__(
cls,
*iterables: Iterable[_T1],
*,
strict: bool = ...
) -> zip[tuple[_T1, ...]]: ...
While I have seen zip(*x) in the wild, I have not seen zip(a,b,c,*x) in any environment before, so I don't think it's necessary to write an overload for that edge case.
- 主要語言
- Python
- 星號
- 5.1k
- 分支
- 2.1k
- 平均合併
- 2 天 1 小時
- 30 天內合併 PR
- 115
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
python/typeshed 的其他 Issue
-
`networkx.set_edge_attributes` should support scalar value + name可能已有人在做 @Fire162 於 10 天前認領。 未關閉
難度 2/5 1-3 小時 新手友好度 67/100
維護者通常 1 天內回覆
-
false alarm on decode call可能已有人在做 @jw9829 於 37 天前認領。 未關閉help wanted stubs: false positive
難度 2/5 1-3 小時 新手友好度 76/100
python/typeshed#16441 · 1 則留言 ·
維護者通常 1 天內回覆
-
Don't run pyright basic checks on projects with strict pyright settings in CI可能已有人在做 @Mohith1612 於 74 天前認領。 未關閉project: infrastructure
難度 2/5 1-3 小時 新手友好度 68/100
python/typeshed#16005 · 1 則留言 ·
維護者通常 1 天內回覆
-
stubs: improvement
難度 2/5 1-3 小時 新手友好度 72/100
python/typeshed#15548 · 5 則留言 ·
維護者通常 1 天內回覆
-
stubs: improvement
難度 2/5 1-3 小時 新手友好度 64/100
python/typeshed#15529 · 5 則留言 ·
維護者通常 1 天內回覆
相似的 Issue
-
難度 1/5 1-3 小時 新手友好度 78/100
QuantConnect/Documentation#2838 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 70/100
awslabs/route53-dynamic-dns-with-lambda#67 · 1 則留言 ·
-
`SubAgents` returns a child run's `DeferredToolRequests` to the parent as a successful tool result未關閉bug pkg:harness
難度 2/5 1-3 小時 新手友好度 70/100
pydantic/pydantic-ai#12405 ·
維護者通常 1 天內回覆
-
good first issue help wanted
難度 2/5 1-3 小時 新手友好度 78/100
-
good first issue help wanted
難度 1/5 1 小時以內 新手友好度 82/100