python - 表示可以多次迭代的Iterable的pythonic方式是什么
问题描述
我想就用类型提示在 python 中表达以下函数的最 Pythonic 方式获得您的建议:
我想公开一个函数作为接受输入参数并返回输出的库的一部分。输入参数的约定应该是:
- 我的函数可以迭代它
- 如果我的函数维护对输入的引用(例如,通过返回一个保留该引用的对象),那没关系
- 可以多次迭代输入
一个示例可能是一个函数,它接受一系列 URL,然后向这些 URL 发出请求,可能带有一些重试逻辑,因此我必须多次迭代原始序列。但我的问题比这个样本更笼统。
乍一看,一个合适的签名是:
from typing import Iterable
def do_sth(input: Iterable[str]) -> SomeResult:
...
然而,这违反了第三个要求,因为在 python 中,不能保证您可以多次迭代 Iterable,例如因为迭代器和生成器本身就是可迭代的。
另一种尝试可能是:
from typing import Sequence
def do_sth(input: Sequence[str]) -> SomeResult:
...
但是Sequence
合同超出了我的功能所需,因为它包括索引访问以及长度的知识。
我想到的一个解决方案是使用Iterable
签名,然后在内部复制输入。但是,如果源序列很大,这似乎会引入潜在的内存问题。
有没有解决方案,即python是否知道Iterable
每次都会返回一个新迭代器的概念?
解决方案
推荐阅读
- kubernetes - Kafka 连接被 Kubernetes 节点端口拒绝
- c - c 嵌入:使用定义的结构变量名称进行静态结构初始化
- visual-studio - TFS 2015 - 无法接受或拒绝代码审查响应
- excel - 原始电子邮件上的电子邮件戳
- laravel - 在 Laravel 中使用 for else 循环和紧凑函数时如何解决这个问题?
- ffmpeg - FFMPEG 可能的最佳质量图像提取
- flutter - 创建时动画小部件
- r - 如何将具有不同数据类型的嵌套列表转换为数据框?
- css - 关键帧动画在 :before 和 :hover css 中不起作用
- uwp - 如何在 UWP 中的父级内设置固定纵横比视图,并在调整窗口大小时可以均匀拉伸?