python - 如何在 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)]))
解决方案
Python 不像其他类型语言那样区分字符和字符串。
字符只是长度为 1 的 str 对象,因此 str 在 Sequence[character] 的意义上是一个 Sequence[str]。
推荐阅读
- jquery - 我正在使用 laravel 5.4 并使用 ajax 提交
- javascript - 动态创建的 html 来获取图像 - 我想在提交之前显示检索到的图像
- datetime - 如何将 URL 中的 DateTime 值从 Postman 传递到 ASP.Net Core MVC 控制器
- python - 如何在 Python 中导入 OpenSSL 以获取证书的序列号
- java - Akka 演员正在停止
- ios - 代码签名错误 命令/usr/bin/codedesign 失败,退出代码为 1
- python - 熊猫索引日期时间格式未提供所需的输出 Python3
- javascript - jquery 不适用于 diango
- css - 如何仅为角度6中的特定组件设置背景图像
- python - 删除第一列,然后将它们作为索引 pandas