首页 > 解决方案 > 如何在 Python 中输入签名函数(T,Sequence[T])-> int 包括 str?

问题描述

我想键入一个简单的计数函数来计算序列中给定元素的出现次数。由于 str 不是 Sequence[str] 或者是它,这不会给我带来令我惊讶的 mypy 错误吗?

from typing import TypeVar, Sequence

T = TypeVar('T')

def count(x: T, xs: Sequence[T], acc: int = 0) -> int:
    if len(xs) == 0:
        return acc
    else:
        return count(x, xs[1:], acc + (1 if x == xs[0] else 0))


print(count("a", "abracadabra"))
print(count(1, (1,0,1,1,0,1,0,1,1)))
print(count(1, range(10)))
print(count(1, [i for i in range(10)]))

标签: pythonmypy

解决方案


Python 不像其他类型语言那样区分字符和字符串。

字符只是长度为 1 的 str 对象,因此 str 在 Sequence[character] 的意义上是一个 Sequence[str]。


推荐阅读