mypy何时可推断collections.Counter等容器类型?空Counter能否推断?
mypy对collections.Counter类型推断的问题解答
为什么空Counter会触发类型注解报错?
当你初始化空的Counter()时,mypy无法推断它的键和值类型——因为没有任何元素作为类型线索,它不知道这个Counter应该存储字符串、整数还是其他可哈希类型,因此会抛出Need type annotation for "C"的错误。
让mypy自动推断类型的方法
有两种常见方式可以让mypy自动推断Counter的类型:
初始化时传入带类型的可迭代对象
通过给Counter传入明确类型的初始数据,mypy就能从数据中推断出Counter的泛型参数:from collections import Counter # 传入字符串,mypy推断为Counter[str] word_counter = Counter("hello world") # 传入整数列表,mypy推断为Counter[int] num_counter = Counter([1, 2, 3, 2])后续添加明确类型的元素
如果必须先初始化空Counter,后续通过添加带明确类型的元素,mypy会根据操作更新类型推断:from collections import Counter empty_counter = Counter() # 添加字符串键后,mypy自动推断为Counter[str] empty_counter["apple"] += 1
补充:显式类型注解的方案
如果需要在初始化时就明确类型(比如后续操作没有足够类型线索),可以直接添加显式注解,这也是解决报错的常用方法:
from collections import Counter # 指定键为字符串类型 str_counter: Counter[str] = Counter() # 指定键为整数类型 int_counter: Counter[int] = Counter()
内容的提问来源于stack exchange,提问作者Moberg
相关产品推荐
相关产品推荐

