Python 文档 : iterable many times?

标签 python duck-typing

在记录 Python 函数时,我发现这样说更符合 Pythonic:

def Foo(i):
    """i: An interable containing…"""

……而不是……

def Foo(i):
    """i: A list of …"""

i 真的不需要是一个 list 时。 (Foo 将愉快地对 settuple 等进行操作)问题是生成器。生成器通常只允许 1 次迭代。 大多数函数都适用于只允许单次传递的生成器或可迭代对象,但有些则不行。

对于那些不能接受生成器/只能迭代一次的东西的函数,是否有一个清晰、一致的 Python 术语来表示“只能迭代多次的东西”?

iterable 的 Python 词汇表和 iterator似乎有一个“一次,但如果幸运的话可能更多”的定义。

最佳答案

我不知道这方面的标准术语,至少不是随口说的,但我认为如果您需要一个简短的短语,“可重用可迭代”会明白这一点。

在实践中,通常可以构建您的函数,这样您就不需要多次迭代 i 。或者,您可以从可迭代对象中创建一个列表,然后根据需要多次迭代该列表;或者您可以使用 itertools.tee 获取迭代器的多个独立“副本”。这让您可以接受一个生成器,即使您确实需要多次使用它。

关于Python 文档 : iterable many times?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8306465/

相关文章:

python - 三角网格中的最近点

duck-typing - 没有鸭子类型(duck typing)的动态打字?

python & smtplib : Is sending mail via gmail using oauth2 possible?

python - 如何在自身内部引用列表的元素?

metaprogramming - 鸭子类型(duck typing)D

c# - 我可以像这样工作吗?

没有 Eval 的 PHP 动态鸭子类型(duck typing)

python - 如何仅键入协议(protocol)方法的第一个位置参数并让其他参数不键入?

python - 如何在我的代码上使用多处理/多线程?

Python。 conanfile.py 的 Conans 模块