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

Python 3.9 如何为函数返回的字典keys对象指定类型标注

正确标注方案

Python 3.9+ 下直接使用collections.abc.KeysView做泛型标注即可,不需要依赖私有类型,也不需要强制转列表:

from collections.abc import KeysView

# 假设my_dict的键类型为str,值类型为int,你可以替换为实际的键值类型
my_dict: dict[str, int] = {"foo": 1, "bar": 2}

def my_func() -> KeysView[str]:
    return my_dict.keys()

KeysView是Python标准库定义的字典键视图抽象基类,所有Python实现的字典键返回对象都符合这个接口定义,Pylance、mypy等类型检查器都可以正确识别。


关于私有类型_dict_keys的说明

你看到的_dict_keys[key_type, value_type]是类型标注库typeshed中,对CPython专属的dict_keys具体实现类的私有标注,属于底层实现细节,不对外暴露使用:

  • 不要直接引用这个私有类型作为标注,不同Python解释器(比如PyPy)的字典键实现类型不一定相同,用私有类型会导致跨实现的类型标注失效
  • 后续CPython如果调整内部实现,这个私有类型的命名、结构都可能变化,会直接导致你的类型标注报错

是否要转成列表返回?

两种方案没有绝对的优劣,取决于你的实际使用场景:

  • 如果你返回的键需要被调用方修改、或者需要按下标随机访问,那转成list[key_type]返回更合理
  • 如果调用方仅需要遍历键、做成员判断,直接返回KeysView更高效,不需要额外内存拷贝生成列表,是更推荐的方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:06:03